Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django模型中重写clean方法会破坏其他验证吗?_Django_Validation_Django Models_Django Admin - Fatal编程技术网

在Django模型中重写clean方法会破坏其他验证吗?

在Django模型中重写clean方法会破坏其他验证吗?,django,validation,django-models,django-admin,Django,Validation,Django Models,Django Admin,假设我在models.py中有一个简单的模型,打算通过Django Admin进行编辑: class Range(models.Model): gt = models.IntegerField('Greater than') lt = models.IntegerField('Lesser than') def clean(self): if self.gt >= self.lt: raise ValidationError

假设我在
models.py
中有一个简单的模型,打算通过Django Admin进行编辑:

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
小于
lt
的假设方面做得很好,但它也破坏了Django提供的其他现成的基本验证。例如,如果我在Django admin中为这些字段输入了一些非数字数据,则会显示跨越多个屏幕的调试消息:

如果我从
范围
的定义中删除重写的
清除(self)
方法,则此基本验证再次开始正常工作:

当然,现在我可以用
gt
大于
lt
的值输入
Range
s

我真的不知道我做错了什么,因为我以为我只是在遵循Django文档


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

您可以先运行父
clean
方法:

类别范围(models.Model):
gt=models.IntegerField('大于')
lt=models.IntegerField('小于')
def清洁(自清洁):
super().clean()
如果self.gt>=self.lt:
raise ValidationError(范围不正确)