假设我有以下模型:
class myClassObj(models.Model):
flag1 = models.NullBooleanField()
flag2 = models.BooleanField()
现在也假设我希望数据库强制执行以下约束:
flag1 should be None if and only if flag2 is false
如何在此模型中编写约束,以便在创建或编辑myClassObj时检查此条件?我看到了一些有趣的信息here。但我没有看到如上所述如何指定“iff”约束。
答案 0 :(得分:0)
Django文档建议进行自定义验证,通过覆盖Model.clean()
来访问多个字段。
文档中的这个示例显示了如何验证仍处于“草稿”阶段的新闻文章是否没有发布日期。
def clean(self):
import datetime
from django.core.exceptions import ValidationError
# Don't allow draft entries to have a pub_date.
if self.status == 'draft' and self.pub_date is not None:
raise ValidationError('Draft entries may not have a publication date.')
# Set the pub_date for published items if it hasn't been set already.
if self.status == 'published' and self.pub_date is None:
self.pub_date = datetime.date.today()
有关详细信息,请参阅此处的完整参考:https://docs.djangoproject.com/en/dev/ref/models/instances/#validating-objects
要在每次保存对象时调用此对象,您还需要覆盖保存方法:https://docs.djangoproject.com/en/dev/topics/db/models/#overriding-model-methods。
如果您只需要验证单个字段,则其他用例的另一个有用参考是编写自定义验证器:https://docs.djangoproject.com/en/dev/ref/validators/