如何从 Django 视图中填写表单?

How to fill in a form from a Django view?

大家晚上好,

我正在建立我的第一个网站,但遇到了以下问题。我有一个表单,其中包含要由用户完成的不同字段。这些字段之一是我不希望用户完成的用户字段。因此,我想通过视图从后端完成。我尝试了不同的方法,但我做不到,有什么提示或建议吗?

下面是我的代码:

Models.py:

class CompanyForm(ModelForm):
class Meta:
    model = Company
    fields = ('company_name', 'outstanding_shares', 'share_price', 'revenue', 'expenses', 'total_assets','total_liabilities', 'current_assets','current_liabilities', 'operating_cashflows', 'capex')
    widgets = {
        'company_name': forms.TextInput(attrs={'class': 'form-control', 'placeholder' : 'Company name'}),
        'outstanding_shares': forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Shares outstanding'}),
        'share_price':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Share price'}),
        'revenue':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Revenue'}),
        'expenses':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Expenses'}),
        'total_assets':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Total Assets'}),
        'total_liabilities':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Total Liabilities'}),
        'current_assets' :forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Current Assets'}),
        'current_liabilities':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Current Liabilities'}),
        'operating_cashflows':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Operating Cashflows'}),
        'capex':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Capital Expenditure'}),            
    }

Views.py:

def create_comp(request):      
form = CompanyForm()
if request.method == 'POST':
    print(request.POST)
    form = CompanyForm(request.POST)
    user = request.user      
    if form.is_valid(): 
        User = user                                  
        form.save()
        return HttpResponseRedirect('http://127.0.0.1:8000/companies_list/') 

当我创建模型并在数据库中检查时,未分配用户。

如下图

你有不同的方法来做到这一点

1- 例如你可以覆盖保存方法

像这样更改代码:

views.py

def create_comp(request):      
    form = CompanyForm()
    if request.method == 'POST':
        print(request.POST)
        form = CompanyForm(request.POST)
        user = request.user      
        if form.is_valid(): 
            form.save(user=user)
            return HttpResponseRedirect('http://127.0.0.1:8000/companies_list/')

forms.py

 class CompanyForm(ModelForm):
      class Meta:
         model = Company
         fields = ('company_name', 'outstanding_shares', 'share_price', 'revenue', 'expenses', 'total_assets','total_liabilities', 'current_assets','current_liabilities', 'operating_cashflows', 'capex')
         widgets = {
        'company_name': forms.TextInput(attrs={'class': 'form-control', 'placeholder' : 'Company name'}),
        'outstanding_shares': forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Shares outstanding'}),
        'share_price':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Share price'}),
        'revenue':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Revenue'}),
        'expenses':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Expenses'}),
        'total_assets':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Total Assets'}),
        'total_liabilities':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Total Liabilities'}),
        'current_assets' :forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Current Assets'}),
        'current_liabilities':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Current Liabilities'}),
        'operating_cashflows':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Operating Cashflows'}),
        'capex':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Capital Expenditure'}),            
         }
      def save(self, **kwargs):
          user = kwargs.pop("user", None)
          instance = super(CompanyForm, self).save(**kwargs)
          instance.user = user
          instance.save()
          return instance

2 - 您可以在表格保存后更新公司和添加用户

views.py

def create_comp(request):      
    form = CompanyForm()
    if request.method == 'POST':
        print(request.POST)
        form = CompanyForm(request.POST)
        user = request.user      
        if form.is_valid(): 
            instance = form.save(commit=False)
            instance.user = user
            instance.save()
            return HttpResponseRedirect('http://127.0.0.1:8000/companies_list/')