如何为一个正整数设置一个范围,其中上界是来自另一个字段的输入



假设我有两个变量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.'})

相关内容

  • 没有找到相关文章

最新更新