1
        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 表中删除用户和组之间的关系。我该怎么做呢。

谢谢

4

1 回答 1

4

思考这个问题的关键是要意识到 u.group 是一个管理器,就像 Groups.objects 是一个管理器一样(默认情况下前者是后者的子类)。您在 u.group 上调用的大多数操作都会影响整个 Group 表(可能会首先过滤到与 u 相关的对象)。这意味着,假设 g 与 u 有关,

u.group.filter(id=g.id).delete()

应该与

Groups.objects.filter(id=g.id).delete()

在这两种情况下, .filter() 返回一个查询集(对于 u 完全天真)并且 .delete() 删除所有成员。

好消息是 u.group 应该是一个 ManyRelatedManager,这意味着会有其他可用的方法。对于许多示例,请查看此处。应该适合您的场景的一个:

u.group.remove(g)
于 2009-03-18T22:01:55.910 回答