确保两个属性始终不同的 Django 模型 - unique_together 是答案吗?

Posted

技术标签:

【中文标题】确保两个属性始终不同的 Django 模型 - unique_together 是答案吗?【英文标题】:Django model ensuring two properties should always be different - Is unique_together the answer? 【发布时间】:2017-08-08 12:04:34 【问题描述】:

如何确保两个属性的唯一组合不重复

例如在下面的模型中

class modelBodyPart(models.Model):
    area = models.CharField(max_length=128)
    crush_name = models.CharField(max_length=128)

在modelBodyPart的每个实例中areacrush_name应该总是不同的

例如,一些允许和不允许的结果是:

  area = Area_A crush_name=Jenny //OK
  area = Area_A crush_name=Jordan //OK
  area = Area_B crush_name=Jenny //OK
  area = Area_A crush_name=Jenny //Not allowed

我将如何在模型中实现这一点?我会使用unique_together 我无法完全理解上述链接中的案例要求,这就是我在这里询问的原因。

【问题讨论】:

【参考方案1】:

是的,你是对的,你的代码应该是这样的 -

models.py

class modelBodyPart(models.Model):
    area = models.CharField(max_length=128)
    crush_name = models.CharField(max_length=128)

    class Meta:
         unique_together = ['area','crush_name']

【讨论】:

以上是关于确保两个属性始终不同的 Django 模型 - unique_together 是答案吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 的身份验证用户模型中,将名字、姓氏作为必需属性而不是可选属性

如何找到两个 Django 查询集的交集?

django models 中choices之用法举例

非常困惑......在 Django 中使用“注释”的问题

Django 管理站点,更改不同用户的模型可见性

Django TextField 始终是必需的,尽管 blank=True,Null=True