Frage

        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()

Wie kann ich die Einträge in Beziehungstabelle löschen. In diesem Fall habe ich eine viel zu viele Beziehungen zwischen Gruppen und Benutzern. Die Delete-Anweisung in dem obigen Code löscht die Gruppe aus den Gruppen-Tabelle. Ich möchte nur die Beziehung zwischen dem Benutzer und die Gruppe aus der Users_group Tabelle löschen. Wie kann ich dies tun.

Dank

War es hilfreich?

Lösung

Der Schlüssel zu diesem Problem zu denken, ist zu erkennen, dass u.group ein Manager ist, wie Groups.objects ein Manager ist (standardmäßig die ehemaligen eine Unterklasse des letzteren). Die meisten Operationen, die Sie auf u.group rufen die gesamte Gruppe Tabelle (mit der Möglichkeit, dass es zuerst Objekte filtert bis zu u bezogen) beeinflussen. Das bedeutet, dass unter der Annahme, g auf u bezogen,

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

sollte das gleiche wie

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

In beiden Fällen .filter () gibt einen queryset (ganz naiv in Bezug auf u) und .delete () löscht alle Mitglieder.

Die gute Nachricht ist, dass u.group ein ManyRelatedManager sein sollte, was bedeutet, dass es für sie zusätzliche Methoden zur Verfügung stehen wird. Für viele Beispiele finden Sie hier . Die eine, die Ihr Szenario passen sollte:

u.group.remove(g)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top