如何在模型中描述m2m三联接表(Django)

时间:2010-04-20 11:46:53

标签: python django model-view-controller model many-to-many

我的问题几乎相同as this question,但所有关系应该是多对多的。

我的models.py中有以下类(稍微简化):

class Profile(models.Model):
    # Extending the built in User model  
    user = models.ForeignKey(User, unique=True)  
    birthday = models.DateField()

class Media(models.Model):
    title = models.CharField(max_length=200)
    description = models.TextField(max_length=2000)

class Role(models.Model):
    name = models.CharField(max_length=50)


我想要的是一个看起来像这样的联结表:

CREATE TABLE `media_roles` (
    `media_id` bigint(20) unsigned NOT NULL,
    `profile_id` bigint(20) unsigned NOT NULL,
    `role_id` bigint(20) unsigned NOT NULL
)


  • John Doe - 导演,作家,制片人
  • Jane Doe - 执行制片人
  • ...

这是我到目前为止所使用的:

class MediaRole(models.Model):
    media = models.ForeignKey(Media)
    user = models.ForeignKey(Profile)
    role = models.ForeignKey(Role)


但是,有没有更好的方法来做到这一点,不涉及在模型中创建一个单独的类?

1 个答案:

答案 0 :(得分:0)

将两个m2m关系分开怎么办?

class Profile(models.Model):
    ...
    medias = models.ManyToManyField(Media, related_name='profiles')
    roles = models.ManyToManyField(Role, related_name='profiles')

这样Django为你创建了两个关联表,你可以利用这样方便的相关字段:

profile = Profile.objects.get(user=someone)
print profile.medias.all()
print profile.roles.all()