[Fixed]-Assigning a field to a model only when it is part of another model

1๐Ÿ‘

โœ…

Iโ€™d use a custom through model/table for the m2m relation between Person and Project (*refusing to use your mix of camel and snake case). This model can then have a ForeignKey to a Role. This way, every relation between a person and project is characterized by a (reusable!) role:

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'),) 
๐Ÿ‘คuser2390182

Leave a comment