我应该在 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()