Помогите с удалением рецензий в Django - PullRequest
1 голос
/ 19 марта 2009
        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 Ответ

4 голосов
/ 19 марта 2009

Ключом к размышлению над этой проблемой является осознание того, что 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 () возвращает набор запросов (полностью наивный по отношению к вам), а .delete () удаляет все элементы.

Хорошей новостью является то, что u.group должен быть ManyRelatedManager, а это означает, что для него будут доступны дополнительные методы. Для многих примеров, проверьте здесь . Тот, который должен соответствовать вашему сценарию:

u.group.remove(g)
...