如何从 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/')
大家晚上好,
我正在建立我的第一个网站,但遇到了以下问题。我有一个表单,其中包含要由用户完成的不同字段。这些字段之一是我不希望用户完成的用户字段。因此,我想通过视图从后端完成。我尝试了不同的方法,但我做不到,有什么提示或建议吗?
下面是我的代码:
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/')