帮助删除Django中的记录

时间:2009-03-18 21:04:55

标签: django django-models django-orm

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

谢谢

1 个答案:

答案 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)