【问题标题】:Django: Constraint on multiple model fieldsDjango:对多个模型字段的约束
【发布时间】: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 上放置唯一约束的推荐方法是什么?是否正在考虑覆盖保存但也许有更好的解决方案?

【问题讨论】:

标签: python django


【解决方案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")

【讨论】:

    猜你喜欢
    • 2019-11-01
    • 2019-11-08
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    相关资源
    最近更新 更多