假设我有两个变量A和B,它们都是正整数。A不能小于1,B不能大于A。
在我的模型中,我有这样的东西:
A = models.PositiveIntegerField(validators=[MinValueValidator(1)])
B = models.PositiveIntegerField(validators=[MaxValueValidator(A)])
这给了我以下错误:
TypeError: '<=' not supported between instances of 'PositiveIntegerField' and 'int'
有人能建议如何实现这种逻辑吗?
在.clean()
方法[Django-doc]中执行跨越多个字段的验证:
from django.core.exceptions import ValidationError
class MyModel(models.Model):
a = models.PositiveIntegerField(validators=[MinValueValidator(1)])
b = models.PositiveIntegerField()
defclean(self):
if self.b > self.a:
raise ValidationError('a should be greater than or equal to b.')
由于这些不是特定于字段的错误,如果使用ModelForm
,它将把这些错误呈现为{{ form.non_field_errors }}
。有关详细信息,请参阅文档的手动渲染字段部分。
您可以通过向ValidationError
传递一个以字段名称为关键字的字典,使其特定于字段
from django.core.exceptions import ValidationError
class MyModel(models.Model):
a = models.PositiveIntegerField(validators=[MinValueValidator(1)])
b = models.PositiveIntegerField()
def clean(self):
if self.b > self.a:
raise ValidationError({'b':'a should be greater than or equal to b.'})