是否在M2M关系中使用直通模型

时间:2011-06-11 21:15:26

标签: django django-models

我正在将用户的教育添加到他的userprofile中。用户可能有多个条目用于他的教育。我应该使用基本的M2M关系,例如 -

class Education(models.Model):
    school = models.CharField(max_length=100)
    class_year = models.IntegerField(max_length=4, blank=True, null=True)
    degree = models.CharField(max_length=100, blank=True, null=True)

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True)
    educations = models.ManyToManyField(Education)

或者我应该使用直通模型来建立这种关系?谢谢。

2 个答案:

答案 0 :(得分:2)

Django将create automatically an intermediary联接表来表示两个模型之间的ManyToMany关系。

如果您想在此表中添加更多字段,请通过through属性提供您自己的表格(即模型),否则您不需要。

答案 1 :(得分:2)

@manji是正确的:无论你是否使用through,Django都会创建一个映射表。

提供一个示例,说明您可能希望向中间人或through表添加更多字段的原因:
您可以在through表格中有一个字段来跟踪该特定教育是否代表该人员参加的最终学校:

class Education(models.Model):
    ...

class UserProfile(models.Model):
    ...
    educations = models.ManyToManyField(Education, through='EduUsrRelation')

class EducationUserRelation(models.Model):
    education = models.ForeignKey(Education)
    user_profile = models.ForeignKey(UserProfile)
    is_last_school_attended = models.BooleanField()