我为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