Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅当某个字段是另一个模型的一部分时才将其指定给该模型_Python_Django_Django Models - Fatal编程技术网

Python 仅当某个字段是另一个模型的一部分时才将其指定给该模型

Python 仅当某个字段是另一个模型的一部分时才将其指定给该模型,python,django,django-models,Python,Django,Django Models,我正在学习Django,我发现自己处于以下场景中:我有一个包含各种字段的项目模型。其中一位是关键人员。另一个是关键人员角色,它定义了每个关键人员在项目中扮演的角色 一个项目可以有不同的关键人员,每个关键人员可以有不同的角色 关键人员没有默认角色,他们可以在不同的项目中扮演任何角色 如何在Django中对该场景进行最佳建模?我似乎找不到关于如何对这种情况建模的例子。这是我的型号.py: from django.db import models from phonenumber_field.mo

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

  • 一个项目可以有不同的关键人员,每个关键人员可以有不同的角色
  • 关键人员没有默认角色,他们可以在不同的项目中扮演任何角色
如何在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'),)