Django自定义验证器不起作用

Sri*_*sha 1 django django-models django-validation python-2.7

我编写了一个自定义验证器,如果给定的字段值为负,则会引发ValidationError.

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

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

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])
Run Code Online (Sandbox Code Playgroud)

但是在创建对象时,如果价格低于零,则不会产生任何错误.
我不知道我在哪里做错了,我是django的新手.
我正在使用Django 1.9.
请帮我 .

Say*_*yse 5

验证器用于表单,而不是用于创建对象.如果您要在表单之外创建对象,则需要提供另一种验证输入的方法.

最简单的full_clean方法是在保存之前调用模型的方法,如文档中所示

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
Run Code Online (Sandbox Code Playgroud)

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