Django 自定义验证器不工作

标签 django python-2.7 django-models django-validation

我写了一个自定义验证器,如果给定的字段值为负,它将引发 ValidationError。

  def validate_positive(value):
        if value < 0:
            raise ValidationError(
                    _('%(value) is negative number'),
                    params = {'value': value}
                    )

我通过字段的验证器参数将其添加到我的模型字段

class Book(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    title = models.CharField(max_length=50)
    price = models.IntegerField(default=0,validators=[validate_positive])
    quantity = models.IntegerField(default=0,validators=[validate_positive])

但是在创建对象时,如果价格小于零,它不会引发任何错误。
我不知道我哪里做错了而且我是 django 的新手。
我正在使用 Django 1.9
请帮助我。

最佳答案

验证器用于表单,而不是用于创建对象。如果您要在表单外创建对象,则需要提供一种替代方法来验证输入。

执行此操作的最简单方法是在保存之前调用模型的 full_clean 方法,如 docs 中所示。

from django.core.exceptions import ValidationError
try:
    article.full_clean()
except ValidationError as e:
    # Do something based on the errors contained in e.message_dict.
    # Display them to a user, or handle them programmatically.
    pass

这类似于表单中发生的情况,并且会调用模型字段上的任何验证器。

关于Django 自定义验证器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36616922/

相关文章:

python - 属性错误 : 'module' object has no attribute 'file'

django - Django中的多个对象类型引用

python - django rest 框架序列化程序和 django 表单

python - Django - CSS 文件未在生产中加载(调试 : False)

python - 为什么我的一些 html 标签在 css 之后,而另一些则没有?

string - :- Finding String permutations的迭代解决方案

python - Mechanize 打开 Url python

Django 。如何正确保存时间和时区

Django - Django 的图像字段默认支持/不支持哪些文件类型?

python - Django:检查 values_list 中的值是否有和没有 prefetch_related/select_related