Python MinValueValidator在Django中的DecimalField上不工作
我有一个使用Django和Django Rest框架开发的API。我有一个带有DecimalField的模型,它应该存储至少一个的值。因此,我用以下方式定义了该字段:Python MinValueValidator在Django中的DecimalField上不工作,python,django,decimal,django-rest-framework,Python,Django,Decimal,Django Rest Framework,我有一个使用Django和Django Rest框架开发的API。我有一个带有DecimalField的模型,它应该存储至少一个的值。因此,我用以下方式定义了该字段: goal = models.DecimalField(decimal_places=2, max_digits=16, validators=[MinValueValidator(1)]) 当我使用DRF的ModelViewSet创建调用API的对象时,我可以创建目标为负的对象,因此验证程序似乎不起作用,因为我已将其包含在模型序
goal = models.DecimalField(decimal_places=2, max_digits=16, validators=[MinValueValidator(1)])
当我使用DRF的ModelViewSet创建调用API的对象时,我可以创建目标为负的对象,因此验证程序似乎不起作用,因为我已将其包含在模型序列化程序中
有什么想法吗?只有在使用Django的ModelForm时,验证器才会自动运行。否则,您需要自己触发验证,通常是通过调用模型对象的full_clean方法
请参见验证程序仅在使用Django的ModelForm时自动运行。否则,您需要自己触发验证,通常是通过调用模型对象的full_clean方法 请参见这是Django REST framework 3.3.x的一部分。您可以通过降级到3.2.5或等待3.3.3发布(其中应包括修复)来临时修复问题 DRF目前正在过滤掉Django<1.9中的验证器,这就是为什么它没有实际运行。这是Django REST framework 3.3.x的情况。您可以通过降级到3.2.5或等待3.3.3发布(其中应包括修复)来临时修复问题
DRF目前正在过滤Django<1.9中的验证器,这就是为什么它没有实际运行。请注意,DRF实际上没有调用clean方法,这似乎是允许负值通过的原因。另外,如果重写clean方法,您可能应该调用super。请注意,clean方法实际上不是由DRF调用的,这似乎就是允许负值通过的原因。另外,如果您覆盖了clean方法,您可能应该调用super。谢谢!我用起亚的答案修补了它,但一旦这个问题得到解决,我想我可以删除它并像往常一样使用验证器。谢谢!我用起亚的答案修补了它,但一旦这个问题得到解决,我想我可以删除它并像往常一样使用验证器。
from django.db import models
from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy as _
class MyModel(models.Model):
goal = models.DecimalField(decimal_places=2, max_digits=16,
validators=[MinValueValidator(1)])
def clean(self):
if self.goal < 1:
raise ValidationError(_('Only numbers equal to 1 or greater are accepted.'))