BooleanField自定义验证程序无法正常工作

时间:2014-06-12 10:00:18

标签: django validation django-models

我为BooleanField编写了自定义验证程序,以确保保存具有true值的对象。我从this post获取了这个想法。

这是我的模特:

terms_accepted = models.BooleanField(u"Terms accepted", validators=[validate_boolean])

这是自定义验证器:

def validate_boolean(value):
if not value:
    raise ValidationError(u"Durp!")

但验证器永远不会被执行。我在那里放了一个调试断点,但没有任何反应。

我之前使用过非自定义验证器(在IntegerFields上),它们像魅力一样工作,例如:

validators=[MinValueValidator(1900), MaxValueValidator(2014)]

任何想法我可能做错了什么?或者它可能是django错误?

谢谢, 罗尼

1 个答案:

答案 0 :(得分:2)

根据用于验证对象的This文档:

您可clean_fields(exclude=None)验证模型中的所有字段,但exclude中的字段除外。

来自This doc:

  

请注意,保存时不会自动运行验证程序   model,但如果您使用的是ModelForm,它将运行您的验证器   在表单中包含的任何字段上。

有关验证here的更多信息。

修改

对于特定于字段的错误,clean_<field>()可以使用forms。例如:

terms_accepted= forms.BooleanField()
-------
-------
def clean_terms_accepted(self):
    data = self.cleaned_data
    if data['terms_accepted'] is not None:
        return True
    else:
        msg="Durp!"
        self._errors["terms_accepted"] = self.error_class([msg])
        return False