问题描述
我有两个模型社区和用户。在社区模型中,我创建了一个名为 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 个最相关问题的链接:relatedQuestion1、relatedQuestion2。
在带有 raw_id_fields 以更新关系的 relatedQuestion1 中的答案并没有让我满意,因为这似乎是通过它们的 id 搜索相关对象的另一种方法,而不是删除一个的方法关系。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)