布尔域自定义验证器不起作用



我为BooleanField编写了一个自定义验证器,以确保保存具有true值的对象。我从这篇文章中得到了这个想法。

这是我的模型:

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的bug?

根据本文档验证对象:

您可以clean_fields(exclude=None),它将验证模型中的所有字段,除了exclude中的字段。

From This doc:

请注意,当您保存文件时,验证器不会自动运行但是如果您使用的是ModelForm,它将运行您的验证器

关于验证的更多信息在这里。

编辑

对于特定字段的错误,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

最新更新