【问题标题】:Django association between three models三个模型之间的Django关联
【发布时间】:2023-03-15 23:37:01
【问题描述】:

我有这三个模型:

  • 人。
  • 项目。
  • 角色。

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

一般问题:使用 Django 处理“三元关联”的正确方法是什么?

【问题讨论】:

    标签: django database-design django-models


    【解决方案1】:

    我会使用 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 不确定您的意思。这是一种正确的方法......没有黑客,没有不良做法,据我所知,这是受支持和推荐的 Django 方式。你更喜欢什么?这是在 Django 中建立三元关联的方法。对应这个图:dcs.warwick.ac.uk/~ananda/umlNotes/img57.gif
    • 为什么 Person 有 ManyToManyField 而没有 Role 和 Project?
    • @user2080105 PersonProject 都有一个 m2m 字段,关系是双向的。如果您在一个模型上添加字段,则不必为另一个模型执行此操作。如果您希望 Person 在单个项目中具有多个角色,您可以将 role ForeignKey 更改为 m2m 字段,否则就不需要了。
    猜你喜欢
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多