MinValueValidator不在Django中使用DecimalField

时间:2016-01-03 15:29:37

标签: python django decimal django-rest-framework

我有一个用Django和Django Rest Framework开发的API。我有一个带有DecimalField的模型,它应该存储至少一个值。因此,我已按以下方式定义了该字段:

goal = models.DecimalField(decimal_places=2, max_digits=16, validators=[MinValueValidator(1)])

当我创建调用API的对象(使用DRF的ModelViewSet)时,我可以创建具有负“目标”的对象,因此验证器似乎不起作用(我已将它包含在模型序列化器中)。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

验证器仅在使用Django的ModelForm时自动运行。否则,您需要自己触发验证,通常是通过调用模型对象的full_clean()方法。

请参阅https://docs.djangoproject.com/en/1.9/ref/validators/#how-validators-are-run

答案 1 :(得分:1)

{{1}}

答案 2 :(得分:1)

这是Django REST框架3.3.x的a known bug。您可以通过降级到3.2.5暂时“修复”问题,或者等待3.3.3发布(应包括修复)。

DRF目前正在过滤Django中的验证器< 1.9,这就是它实际上没有被运行的原因。