我一次又一次地阅读Django文档,但我一直在使用模型中的clean()方法。
这是我的models.py:
class Profile(models.Model):
number1 = models.IntegerField(blank=True, null=True)
number2 = models.IntegerField(blank=True, null=True)
class FormProfile(ModelForm):
def clean(self):
number1 = self.cleaned_data.get('number1')
number2 = self.cleaned_data.get('number2')
if number1 >= number2:
raise forms.ValidationError("number1 should not be above number2")
class Meta:
model = Profile
clean()验证是否正确完成,但问题是number1和number2的基本验证(应该是整数)不再引发任何错误。 例如,如果number1是一个整数但number2不是整数,那么cleaning_data字典只包含number1,这是正常的,因为number2未经过验证,但没有引发错误。
如果没有引发基本错误,我怎样才能让Django首先引发基本错误然后执行clean()方法?
谢谢!
答案 0 :(得分:1)
您正在讨论的基本验证是通过BaseForm
的{{3}}方法调用的,当您覆盖此方法时,您隐藏了基础验证。
你需要在你的干净方法中通过super调用ModelForms基础清理方法
def clean(self):
super(FormProfile, self).clean()
如clean
中的示例所示,您仍然需要检查支票中的值是否为零,以便它变为
if number1 and number2 and number1 >= number2:
您可以使用.get
提供默认值,但我不建议这样做,因为它会使检查更难以验证正确的结果
答案 1 :(得分:0)
def clean(self):
# your validation
return super(FormProfile, self).clean()