在重写Django模型中的clean方法时禁用基本验证

时间:2016-05-10 09:35:14

标签: python django validation django-forms

我一次又一次地阅读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()方法?

谢谢!

2 个答案:

答案 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()