在__init__之后但在清洁之前更改django中的表单字段值

时间:2017-09-10 22:09:24

标签: python django

我想将我的django表单中某些字段的值重置为None,位于表单的__init__方法内。

这是我到目前为止所做的:

class MyFormForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = ['field1', ...]

    field1 = forms.IntegerField(max_value=100)

    def __init__(self, *args, **kwargs):
        values_changed = kwargs.pop('values_changed', False)
        super(MyFormForm, self).__init__(*args, **kwargs)
        self.data = self.data.copy()

        if not values_changed:
            for field in self.fields:
                self.data[field] = None

不幸的是,当表单显示在我的模板中时,已经POST的值仍在其中。如何删除该值,以便更改在模板中生效,该模板呈现表单?

不能工作的事情:

  • 设置初始参数。由于存在值,因此将被忽略
  • 使用已清理的值。在此阶段不会清理表单,因为它无效。因此cleaned_data不存在

我正在访问这样的值:

{{ form.field1.value|default_if_none:"Please enter." }}

编辑:我刚试过

{{ form.data.field1|default_if_none:"Please enter." }}

没有变化。

1 个答案:

答案 0 :(得分:1)

我是个白痴。有两种形式,formform_2

我使用了错误的变量名称。我的错。它与上面的代码一样工作。