仅当模型是另一个模型的一部分时才将字段分配给模型

时间:2017-02-26 05:22:53

标签: python django django-models

我正在学习Django,我发现自己处于以下场景:我有一个fragment模型,其中包含各种字段。其中一个是project。另一个是key_personnel,它定义了每个关键人员在项目中扮演的角色。

  • 项目可以有各种关键人员,每个关键人员都可以担任各种角色。
  • 关键人员没有默认角色,他们可以在不同的项目中扮演任何角色。

如何在Django中最好地模拟这种情况?我似乎无法找到关于如何建模这种情况的例子。这是我的key_person_roles

models.py

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我使用自定义through模型/表格来表示PersonProject之间的m2m关系(*拒绝使用骆驼和蛇的混合情况)。然后,此模型可以ForeignKeyRole。这样,人与项目之间的每个关系都以(可重用!)角色为特征:

class Person(models.Model):
    ....

# model to capture the different types of roles
class Role(models.Model): 
    name = models.CharField(max_length=100)     

class Project(models.Model):
    # specify custom through model
    key_persons = models.ManyToManyField('Person', through='ProjectPerson')

# m2m-model for project-person relation
class ProjectPerson(models.Model):
    person = models.ForeignKey('Person', ...)     
    project = models.ForeignKey('Project', ...)  
    # such a relation has a role!
    role = models.ForeignKey('Role', ...)

    class Meta:
        unique_together = (('person', 'project'),)