【发布时间】:2023-03-15 23:37:01
【问题描述】:
我有这三个模型:
- 人。
- 项目。
- 角色。
使用 Django 的模型系统,如何表示一个人以特定角色参与特定项目的事实?
一般问题:使用 Django 处理“三元关联”的正确方法是什么?
【问题讨论】:
标签: django database-design django-models
我有这三个模型:
使用 Django 的模型系统,如何表示一个人以特定角色参与特定项目的事实?
一般问题:使用 Django 处理“三元关联”的正确方法是什么?
【问题讨论】:
标签: django database-design django-models
我会使用 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)
【讨论】:
Person 和 Project 都有一个 m2m 字段,关系是双向的。如果您在一个模型上添加字段,则不必为另一个模型执行此操作。如果您希望 Person 在单个项目中具有多个角色,您可以将 role ForeignKey 更改为 m2m 字段,否则就不需要了。