设置不属于模型表单的模型字段的值

时间:2018-02-15 09:49:16

标签: python django django-forms

我有这样的模型

class Income(models.Model):
    value = models.DecimalField(max_digits=10, decimal_places=2)
    remitted = models.DecimalField(max_digits=10, decimal_places=2, default=0.00)

我有一个这样的表格

class EditIncomeForm(forms.ModelForm):
    class Meta:
        model = Income
        fields = ("value", )

        def clean_value(self):
           value = self.cleaned_data["value"]
            if self.value < self.remitted:
                raise forms.ValidationError("Error message")
            return value

现在在模型中,如何更新remitted字段的值? 我似乎无法以这种方式访问​​remitted字段。我是关于Django 2.0的

2 个答案:

答案 0 :(得分:3)

这与字段是否在表单上没有任何关系。

你做错了两件事;首先,您尝试访问self.remitted而不是self.cleaned_data['remitted'];其次,remittedclean_value被调用时已被清除。

要从多个字段访问数据,请改为覆盖主clean()方法:

 def clean(self):
      value = self.cleaned_data["value"]
      remitted = self.cleaned_data["remitted"]
      if value < remitted:
          self.add_error("value", "Error message")

答案 1 :(得分:0)

我从文档中做了一些关于Validation on a ModelForm的阅读,最后我能够在表单中提出错误。完整的表格代码如下。

特别证明{p> This section是我需要的。它说:

  

附加到模型对象的模型表单实例将包含一个   instance属性,使其方法可以访问该特定的   模型实例。

class EditIncomeForm(forms.ModelForm):
    class Meta:
        model = Income
        fields = ("value", )

    def clean(self):
        value = self.cleaned_data['value']
        remitted = self.instance.remitted # access other model field.
        if value <= remitted:
            self.add_error("value", "Error message.")