我应该在 Django 表单中的何处填充必填的隐藏字段 post-submission?
Where should I populate a required hidden field post-submission in a Django Form?
我以为会在form
clean
方法中,但我得到一个required
错误,所以我一定是错的。
我正在使用 ModelForm
,用 form.fields['field_name'].widget = forms.HiddenInput()
隐藏其中一个字段,并尝试在提交后根据其他数据填写它。
你为什么要通过一个字段来做这件事?如果它对用户不可见并且没有填充他们所做的任何事情,那么它不应该出现在表单中。将其从模型窗体中完全排除,并在保存时将其设置在视图中:
if form.is_valid():
obj = form.save()
obj.field_name = my_value
obj.save()
如果您要填写值,则根本不应在表单中包含该字段。您可以使用 exclude
来执行此操作:
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
exclude = ('field_name',)
然后在你的视图中,用commit=False
调用save()
,并在再次保存之前设置值。
if form.is_valid():
instance = form.save(commit=False)
instance.field_name = get_field_value()
instance.save()
我以为会在form
clean
方法中,但我得到一个required
错误,所以我一定是错的。
我正在使用 ModelForm
,用 form.fields['field_name'].widget = forms.HiddenInput()
隐藏其中一个字段,并尝试在提交后根据其他数据填写它。
你为什么要通过一个字段来做这件事?如果它对用户不可见并且没有填充他们所做的任何事情,那么它不应该出现在表单中。将其从模型窗体中完全排除,并在保存时将其设置在视图中:
if form.is_valid():
obj = form.save()
obj.field_name = my_value
obj.save()
如果您要填写值,则根本不应在表单中包含该字段。您可以使用 exclude
来执行此操作:
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
exclude = ('field_name',)
然后在你的视图中,用commit=False
调用save()
,并在再次保存之前设置值。
if form.is_valid():
instance = form.save(commit=False)
instance.field_name = get_field_value()
instance.save()