使用遗留数据库,项目之间的多对多关系,项目中的人员以及他们在该项目中的角色通过三向联结表来表示,如下所示:
如何用Django模型表示这些数据?
我正在尝试编写一个模型,其中project.manager
将返回与person
manager
角色配对的project_id
个实例列表。到目前为止,我最接近的是通过models.ManyToManyField
中的两个不同字段使用Rolepersonproject
,但这只会给我与该项目相关的角色和人员,而不是那些人扮演的角色。我该怎么做?这是自定义管理器,ManyToManyField,模型方法还是自定义SQL的工作?
manage.py inspectdb
给了我这样的模型类来使用:
class Project(models.Model):
project_id = models.AutoField(db_column='project_id', primary_key=True)
class Role(models.Model):
role_id = models.AutoField(db_column='role_id', primary_key=True)
class Person(models.Model):
person_id = models.AutoField(db_column='person_id', primary_key=True)
class Rolepersonproject(models.Model):
project_id = models.ForeignKey(Project, models.DO_NOTHING, db_column='project_id')
role_id = models.ForeignKey(Role, models.DO_NOTHING, db_column='role_id')
person_id = models.ForeignKey(Person, models.DO_NOTHING, db_column='person_id')
答案 0 :(得分:0)
使用inspectdb为您提供的模型,在related_name='rolepersonprojects'
中为每个外键添加Rolepersonproject
之后,您可以在Project
模型上添加一个属性,如下所示:< / p>
class Project(models.Model):
...
@property
def manager(self):
return self.rolepersonprojects.filter(role_id_id={{ id of manager Role }}).values_list('person_id', flat=True)