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,“无法在只有一个字段的模型上添加外键约束”