【问题标题】:How to fill in a form from a Django view?如何从 Django 视图中填写表单?
【发布时间】:2021-08-28 00:11:18
【问题描述】:

晚安社区,

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

下面是我的代码:

模型.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/') 

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

如下图

【问题讨论】:

    标签: django-models django-views django-forms django-templates


    【解决方案1】:

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

    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/')
    

    【讨论】:

      猜你喜欢
      • 2014-03-03
      • 1970-01-01
      • 2016-11-10
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      • 2014-09-22
      • 1970-01-01
      相关资源
      最近更新 更多