Question

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

Comment puis-je supprimer les entrées dans la table de relations? Dans ce cas, j'ai plusieurs relations entre groupes et utilisateurs. L'instruction delete du code ci-dessus supprime le groupe de la table Groups. Je veux juste supprimer la relation entre l'utilisateur et le groupe de la table Users_group. Comment puis-je faire cela.

Merci

Était-ce utile?

La solution

La clé de la réflexion sur ce problème est de réaliser que u.group est un manager, tout comme Groups.objects est un manager (par défaut, le premier est une sous-classe du second). La plupart des opérations que vous appelez sur u.group affecteront la totalité de la table Group (avec la possibilité qu’elle filtre d’abord en fonction des objets associés à u). Cela signifie que, en supposant que g est lié à u,

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

devrait fonctionner de la même façon que

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

Dans les deux cas, .filter () retourne un queryset (complètement naïf par rapport à u) et .delete () supprime tous les membres.

La bonne nouvelle est que u.group devrait être un ManyRelatedManager, ce qui signifie qu'il y aura des méthodes supplémentaires disponibles pour celui-ci. Pour de nombreux exemples, consultez ici . Celui qui devrait correspondre à votre scénario:

u.group.remove(g)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top