Aide à la suppression d'enregistrements dans Django
-
20-08-2019 - |
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
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)