从 ManyToManyField从管理页面和/或从 view.py中删除与对象的关系

问题描述

我有两个模型社区和用户。在社区模型中,我创建了一个名为 member(基于用户模型)的字段 ManyToManyField,即一个社区对象可能有许多成员,而一个成员对象可能属于许多社区。我遇到的问题是,我无法从基于类的 view.py 或管理页面中从社区中删除成员。

使用字段名称成员在社区和用户之间创建多对多关系。

class Community(models.Model):
    member = models.ManyToManyField(User,related_name='member')

用于从社区对象中删除成员的基于类的 view.py 中的代码(仅删除关系,而不是相关对象本身)

class CommunityListView(ListView):
    model = Community

    def get(self,request,*args,**kwargs):
        # The url contains the community id (pk)
        community_id = kwargs['pk']
        c = Community.objects.get(id=community_id)
        u = User.objects.get(id=self.request.user.id)
        c.member.remove(u)

        return super(ListView,self).get(request,**kwargs)

代码执行没有错误,但是当我访问管理页面时,成员仍然存在。我试图在命令 c.save() 之后运行 c.member.remove(u) 但也没有成功。据我了解,Django doc 表示从 ManyToManyField 中删除关系时不需要方法 save()

此外,正如您从附加图片中看到的 [admin page],我无法从管理页面中手动删除成员(orfanos、NewUser)。添加成员只有加号,删除成员没有减号。

我知道有类似的问题推荐使用 remove() 方法,但没有一个我有用。此外,我是 stackoverflow 的新成员,没有积分,因此我无法对我的任何相关问题发表评论。 我附上了 2 个最相关问题的链接relatedQuestion1relatedQuestion2

在带有 raw_id_fields 以更新关系的 relatedQuestion1 中的答案并没有让我满意,因为这似乎是通过它们的 id 搜索相关对象的另一种方法,而不是删除一个方法关系。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)