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

swe*_*gar 6 database django postgresql django-models python-2.7

我开发了一个特定的应用程序,我发现它与指定的数据库和模型架构.我使用的是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)
Run Code Online (Sandbox Code Playgroud)

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

mik*_*keb 5

您要使用组合键。Django不支持此在这里看到。有一些支持,但是您无法建立关系,因此就实际使用而言,它是非常有限的。

当前,Django模型仅支持该集合中的单个列,从而拒绝了许多设计,其中表的自然主键是多个列。Django目前无法使用这些架构;他们必须改为引入一个冗余的单列键(一个“代理”键),从而迫使应用程序对在任何给定实例中用于表的键做出任意和其他不必要的选择。


Goc*_*cht 5

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

unique_together = ("name", "related_name")
Run Code Online (Sandbox Code Playgroud)