Django:对多个模型字段的约束

Posted

技术标签:

【中文标题】Django:对多个模型字段的约束【英文标题】:Django: Constraint on multiple model fields 【发布时间】:2011-08-25 00:48:08 【问题描述】:

例子:

class Author(models.Model):
    first_name = models.CharField()
    last_name = models.CharField()

    def _get_full_name(self):
       return '0 1'.format(self.first_name, self.last_name)

   full_name = property(_get_full_name)

在 full_name 上放置唯一约束的推荐方法是什么?是否正在考虑覆盖保存但也许有更好的解决方案?

【问题讨论】:

类似:***.com/questions/2201598/… 【参考方案1】:

看看元类选项unique_together

你可以这样做:

class Author(models.Model):
    first_name = models.CharField()
    last_name = models.CharField()

    def _get_full_name(self):
       return '0 1'.format(self.first_name, self.last_name)

    full_name = property(_get_full_name)

    class Meta: 
       unique_together = ("first_name", "last_name")

优势在于,这是在数据库级别使用适当的 UNIQUE SQL 语句强制执行的。

【讨论】:

这可能是所需的解决方案,但在某些极端情况下,这不会成为冲突:"'bob' 'brown smith'" 和 "'bob brown' 'smith'" .全名相同,但last_name和first_name不同。【参考方案2】:

unique_together

unique_together = ("first_name", "last_name")

【讨论】:

以上是关于Django:对多个模型字段的约束的主要内容,如果未能解决你的问题,请参考以下文章

使用继承类中的字段的 Django 模型约束条件 - 可能吗?

Django:1215,“无法在只有一个字段的模型上添加外键约束”

Django model中设置多个字段联合唯一约束

Django model中设置多个字段联合唯一约束

如何在 django 的核心模型中添加“unique_together”约束?

django中字段和约束