【发布时间】:2014-10-15 18:59:11
【问题描述】:
我有一个汽车零件数据库,其中包括品牌和非品牌商品。如果品牌名称不可用,则full_name 就是Part.name,否则就是Brand.name + Part.name。
如何定义unique_together 约束以确保full_name 在数据库级别的唯一性?如果缺少品牌名称(即brand_id ForeignKey 是 NULL),当前约束允许多个具有相同名称的部件
class Brand(models.Model):
name = models.CharField(max_length=100)
class Part(models.Model);
name = models.CharField(max_length=100)
brand = models.ForeignKey(Brand, null=True, blank=True)
def get_full_name(self):
if self.brand_id:
full_name = '%s %s'.format(self.brand.name, self.name)
else:
full_name = self.name
return full_name
class Meta:
unique_together = (('name', 'brand'),)
使用:Django 1.6 + PostgreSQL 9.3
附:这里有一个很好的建议来使用 SQL 实现这一点。我正在寻找使用 Django ORM 的解决方案。 https://stackoverflow.com/a/8289253/781695
【问题讨论】:
-
有了 django2.2,您现在可以使用 UniqueConstraint 及其条件参数:docs.djangoproject.com/en/2.2/ref/models/constraints/#condition
标签: django postgresql django-models