【问题标题】:Where should I populate a required hidden field post-submission in a Django Form?在 Django 表单中提交后,我应该在哪里填充所需的隐藏字段?
【发布时间】:2015-12-06 10:06:45
【问题描述】:

我以为会在formclean方法中,但我得到一个required错误,所以我一定是错的。

我用的是ModelForm,隐藏了form.fields['field_name'].widget = forms.HiddenInput()的字段之一,并尝试在提交后根据其他数据填写。

【问题讨论】:

    标签: django forms validation django-forms


    【解决方案1】:

    如果您要填写值,则根本不应该在表单中包含该字段。您可以使用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()
    

    【讨论】:

    • 我想我有点傻了 - 谢谢。鉴于在使用表单的任何地方都需要它,get_field_value() 会去哪里?在 forms.py 中?
    • 由你决定,但forms.py 听起来不错。如果您在很多地方重复使用表单,那么您可能需要覆盖表单的 save() 方法并在那里设置值。
    • 完美,我将其放入 save() 中。对此有什么想法吗? stackoverflow.com/questions/32497711
    【解决方案2】:

    你为什么要通过一个字段来做这件事?如果它对用户不可见并且没有被他们所做的任何事情填充,那么它不应该出现在表单中。将其从模型窗体中完全排除,并在保存时将其设置在视图中:

    if form.is_valid():
        obj = form.save()
        obj.field_name = my_value
        obj.save()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 2019-01-03
      • 2017-07-12
      • 2020-11-03
      相关资源
      最近更新 更多