我有这样的模型
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的
答案 0 :(得分:3)
这与字段是否在表单上没有任何关系。
你做错了两件事;首先,您尝试访问self.remitted
而不是self.cleaned_data['remitted']
;其次,remitted
在clean_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.")