Python 仅当某个字段是另一个模型的一部分时才将其指定给该模型
我正在学习Django,我发现自己处于以下场景中:我有一个包含各种字段的Python 仅当某个字段是另一个模型的一部分时才将其指定给该模型,python,django,django-models,Python,Django,Django Models,我正在学习Django,我发现自己处于以下场景中:我有一个包含各种字段的项目模型。其中一位是关键人员。另一个是关键人员角色,它定义了每个关键人员在项目中扮演的角色 一个项目可以有不同的关键人员,每个关键人员可以有不同的角色 关键人员没有默认角色,他们可以在不同的项目中扮演任何角色 如何在Django中对该场景进行最佳建模?我似乎找不到关于如何对这种情况建模的例子。这是我的型号.py: from django.db import models from phonenumber_field.mo
项目模型。其中一位是关键人员
。另一个是关键人员角色
,它定义了每个关键人员在项目中扮演的角色
- 一个项目可以有不同的关键人员,每个关键人员可以有不同的角色
- 关键人员没有默认角色,他们可以在不同的项目中扮演任何角色
如何在Django中对该场景进行最佳建模?我似乎找不到关于如何对这种情况建模的例子。这是我的型号.py
:
from django.db import models
from phonenumber_field.modelfield import PhoneNumberField
class Key_Person(models.Model):
name = models.CharField(max_length=200)
designation = models.CharField(max_length=100)
email = models.EmailField()
contact = PhoneNumberField()
class Meta:
ordering = ['name']
verbose_name_plural = "Key Persons"
def __unicode__(self):
return self.name
class Key_Person_Role(models.Model):
role = models.CharField(max_length=100)
class Meta:
verbose_name_plural = 'Key Person Roles'
def __unicode__(self):
return self.role
class Project(models.Model):
title = models.CharField(max=150)
description = models.TextField()
# more fields here ...
key_persons = models.ManyToManyField(Key_Person)
# What I want is to assign a role to each key person above.
key_person_roles = models.ManyToManyField(Key_Person_Role)
def __unicode__(self):
return self.title
我感谢你的帮助 我会使用自定义模型/表格来处理人员
和项目
之间的m2m关系(*拒绝使用骆驼和蛇的混合案例)。然后,此模型可以将外键
转换为角色
。这样,个人和项目之间的每一种关系都以(可重用!)角色为特征:
谢谢你的帮助。这很好用!对于管理部分,我不得不从unique\u-together(('person','project'),)
改为unique\u-together=('person','project'),)
是的,这是一个打字错误。更正!
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'),)