0

假设我有以下模型:

class myClassObj(models.Model):
    flag1 = models.NullBooleanField() 
    flag2 = models.BooleanField() 

现在还假设我希望数据库强制执行以下约束:

flag1 should be None if and only if flag2 is false

如何在此模型中编写约束,以便在创建或编辑 myClassObj 时检查此条件?我在这里看到了一些有趣的信息。但是我看不到如何指定如上所述的“iff”约束。

4

1 回答 1

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/

于 2013-06-09T05:16:52.847 回答