Django三个模型之间的关联

5

我有这三个模型:

  • 人员。
  • 项目。
  • 角色。

使用Django的模型系统,如何表示一个人参与特定项目并具有特定角色的事实?

一般问题:如何使用Django处理“三元关联”?

1个回答

2
我会使用中间模型来处理m2m关系,并在其中添加一个字段。
就像这样:
class Role(models.Model):
    name = models.CharField(max_lenth=32)

class Project(models.Model):
    name = models.CharField(max_lenth=32)

class PersonProject(models.Model):
    person = models.ForeignKey('.Person')
    project = models.ForeignKey(Project)

    role = models.ForeignKey(Role)

class Person(models.Model):
    projects = models.ManyToManyField(Project, through=PersonProject)

难道没有更合适的方式吗? - user2080105
1
@user2080105 不确定你的意思。这是一个正确的方法...没有黑客行为,没有不良实践,据我所知,这是Django支持和推荐的方式。你更喜欢什么?这是在Django中创建三元关联的方法。对应于此图:http://www.dcs.warwick.ac.uk/~ananda/umlNotes/img57.gif - wanaryytel
为什么Person有ManyToManyField,而Role和Project没有? - user2080105
@user2080105 PersonProject都有一个m2m字段,关系是双向的。如果你在一个模型上添加了该字段,那么你不必在另一个模型上再添加一次。如果你想让Person在单个Project上拥有多个角色,你可以将roleForeignKey也改为m2m字段,但除此之外没有必要这样做。 - wanaryytel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接