【问题标题】:Django--Should I use Through Table to Structure M2M relationshipDjango--我应该使用通过表来构造 M2M 关系吗
【发布时间】:2011-06-14 14:41:27
【问题描述】:

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

我创建了以下模型

   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

我现在的问题是我正在将俱乐部与帖子相关联,但我不确定如何在不删除所有关联的情况下取消它们的关联。

这可能并不完全清楚。我有一个包含以下 sn-p 的视图:

       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 关系的旧俱乐部,然后建立新的关系。这一切都基于用户编辑他们的帖子。

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

    如果我没有误会,你不需要使用 through使用的任何 M2M 字段都有 add(item)remove(item)all()clear() 方法,所以

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

    您可以使用 all() 列出所有相关数据,并使用 add(item)remove(item) 来添加或删除一个特别的。

    更多信息,请查看documentation

    【讨论】:

      【解决方案2】:

      我不确定我是否理解您的问题,这对您有帮助吗?

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

      【讨论】:

        猜你喜欢
        • 2016-05-07
        • 2012-02-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-13
        • 1970-01-01
        • 2011-04-30
        • 2011-02-05
        相关资源
        最近更新 更多