Django - 我应该使用通过表来构建M2M关系

时间:2011-06-14 14:41:27

标签: django django-models many-to-many

我想代表拥有多个成员的俱乐部(每个成员也可以加入多个俱乐部)。

我创建了以下模型

   class Club(models.Model):
        name=models.CharField(max_length=100)
        admin=models.ManyToManyField(User, related_name='club_admins')
        member=models.ManyToManyField(User, related_name='memberships')
        posts=models.ManyToManyField(Post, blank=True, null=True)   
        description=models.TextField(max_length=500,blank=True)
        public=models.BooleanField(default=True)
        password=models.CharField(max_length=30, blank=True)

        def __unicode__(self):
          return self.name

我现在的问题是,我正在将俱乐部与帖子联系起来,我不知道如何在不删除所有关联的情况下解除它们的关联。

这可能不完全清楚。我有一个包含以下代码段的视图:

       if request.POST.get('clubs'):
                clubs=request.POST['clubs'].split(',')
                p=int(post.id)
                old_clubs=Club.objects.filter(posts__pk=p)
                for o in old_clubs:
                    #figure out how to disassociate the club with this post

                for a in clubs:
                    group=Club.objects.get(name=a)
                    group.posts.add(post)

我试图做的是清除所有与本职位有M2M关系的旧俱乐部,然后形成新的关系。这都是基于用户编辑他们的帖子。

我不确定如何在没有删除所有俱乐部或所有帖子或所有与俱乐部相关的帖子(而不是仅选择帖子)的情况下进入该中间表。

谢谢!

2 个答案:

答案 0 :(得分:1)

我不确定我是否理解你的问题,这有什么帮助吗?

post = Post.objects.get(id=post.id)
post.clubs_set.clear()

答案 1 :(得分:1)

如果我没有误解,您不需要使用通过使用的任何M2M字段都有添加(项目)删除(项目)所有() clear()方法,所以

post = Post.objects.get(id=post.id)
post.clubs.clear()

您可以使用所有()列出所有相关数据,添加(项目)删除(项目)以添加或删除特别的。

有关详情,请查看documentation