如何创建主键包含Django中的两个字段?

时间:2015-07-09 18:00:58

标签: django database postgresql python-2.7 django-models

我开发了一个特定的应用程序,我在指定的数据库和模型架构中找到了它。我使用的是Django 1.8.2版。下面是一个问题。不必要的字段已被省略,模型名称是出于示例目的而发明的,因为我无法透露。请考虑以下模型A和B.

class B (models.Model):

      name = models.CharField(max_length=100)

class A (models.Model):

      name = models.CharField(max_length=100, primary_key=True)
      related_name = models.ForeignKey(B, null=True, blank=True)

经过很长一段时间的项目可能会有几个相同的名称A,但有不同的外键B.在这种特殊情况下,我想模拟主键“A”由两个字段组成:名称和相关名称。如何创建这样的密钥由django中的两个字段组成?

2 个答案:

答案 0 :(得分:3)

您想要使用复合键。 Django不支持此See here。有一些支持,但你不能建立关系,所以它在实际使用中非常有限。

  

目前Django模型仅支持此集合中的单个列,   否认许多设计,其中表的自然主键是   多列。 Django目前无法使用这些模式;他们   必须改为引入冗余的单列密钥(“代理”   键),迫使应用程序任意和其他不必要的   选择在任何给定实例中用于表的键。

答案 1 :(得分:3)

Django不支持复合键。但您可以使用unique-together

unique_together = ("name", "related_name")
相关问题