2009-03-18 2 views
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 в приведенном выше коде удаляет группу из таблицы групп. Я просто хочу удалить отношения между пользователем и группой из таблицы Users_group. Как это сделать.Помощь при удалении рекондов в Django

Благодаря

ответ

4

Ключ к мысли о этой проблеме, чтобы понять, что u.group является менеджером, так же, как Groups.objects является менеджером (по умолчанию бывший является подклассом последнего). Большинство операций, которые вы вызываете на u.group, будут влиять на всю таблицу Group (с возможностью сначала фильтровать объекты, связанные с u). Это означает, что, если предположить г связана с U,

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

должен работать так же, как

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

В обоих случаях, .filter() возвращает QuerySet (полностью наивным по отношению к U) и .delete() удаляет всех участников.

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

u.group.remove(g) 
+0

QuerySets есть метод .delete(), который удаляет все члены QuerySet в одном запросе SQL. –

+0

Конечно. Благодаря! –

Смежные вопросы