我为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
错误?
谢谢, 罗尼
答案 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