在SQL / Django ORM中建模三向关系

时间:2013-08-09 10:05:46

标签: django

任何人都可以帮我弄清楚如何在Django的ORM中建模以下关系吗?

我有一群人。这些人可能属于零个或多个组织。对于一个人所属的每个组织,该人在该组织内拥有所有权。

例如,John是ACME公司和EVIL公司的成员。在ACME公司内,他是销售副总裁,而在EVIL公司内,他是首席执行官。

我知道这听起来不切实际,但这个应用程序适用于许多人属于多个不同组织/资助机构/委员会等行业的非盈利组织。

我有这个人 - >组织部分工作(很简单,因为它只是一个ManyToManyField),但我不知道如何为外键指向的每一行实现特定的标题。

1 个答案:

答案 0 :(得分:4)

您可以使用自定义through模型为单个关系保存额外数据:

class Person(models.Model):
    organisations = models.ManyToManyField(Organisation, through='Position')

class Position(models.Model):
    person = models.ForeignKey(Person)
    organisation = models.ForeignKey(Organisation)
    title = models.CharField(max_length=50)

另请查看through models上的文档。