在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(范围不正确)