for u in Users.objects.all():
for g in u.group.all():
if g not in Groups.objects.filter(domain__user=u.id):
u.group.filter(id=g.id).delete()
如何删除关系表中的条目。在这种情况下,我在组和用户之间有多对多的关系。上面代码中的delete语句从Groups表中删除该组。 我只想从Users_group表中删除用户和组之间的关系。 我该怎么做。
谢谢
答案 0 :(得分:4)
思考这个问题的关键是要意识到u.group是一个管理者,就像Groups.objects是一个管理者一样(默认情况下,前者是后者的子类)。您在u.group上调用的大多数操作都会影响整个Group表(可能会首先过滤到与u相关的对象)。这意味着,假设g与你有关,
u.group.filter(id=g.id).delete()
应与
相同Groups.objects.filter(id=g.id).delete()
在这两种情况下,.filter()都会返回一个查询集(对于你来说完全天真),而.delete()会删除所有成员。
好消息是u.group应该是一个ManyRelatedManager,这意味着将有更多可用的方法。对于许多示例,请检查here。适合您的情况的那个:
u.group.remove(g)