覆盖Django模型中的clean方法会破坏其他验证吗?

时间:2016-04-13 23:50:04

标签: django validation django-models django-admin

假设我在img1a中有一个简单的模型,可以通过Django Admin进行编辑:

models.py

问题:虽然上面的代码在确保class Range(models.Model): gt = models.IntegerField('Greater than') lt = models.IntegerField('Lesser than') def clean(self): if self.gt >= self.lt: raise ValidationError('Incorrect range') 小于gt的假设方面做得很好,但它也打破了Django提供开箱即用的其他基本验证。例如,如果我在Django admin中为这些字段输入一些非数字数据,我会收到跨越多个屏幕的调试消息:

enter image description here

如果我从lt的定义中删除了覆盖的clean(self)方法,则此基本验证将再次开始正常运行:

enter image description here

但是,当然,现在我可以输入RangeRange大于gt

我真的不知道我做错了什么,因为我只是按照https://docs.djangoproject.com/en/1.9/ref/models/instances/#validating-objects

按照Django文档进行操作

我的错误在哪里?如何正确地为我的表单提供验证?

1 个答案:

答案 0 :(得分:4)

您可以先运行父clean方法:

class Range(models.Model):
    gt = models.IntegerField('Greater than')
    lt = models.IntegerField('Lesser than')

    def clean(self):
        super(Range, self).clean()

        if self.gt >= self.lt:
            raise ValidationError('Incorrect range')