Comment supprimer un objet d'une relation plusieurs à plusieurs sans supprimer l'objet réel?
Exemple:
J'ai les modèles Moods
et Interest
.
Mood
possède un champ plusieurs-à-plusieurs interests
(qui est une models.ManyToManyField(Interest)
).
Je crée une instance de Moods
appelée my_mood
. Dans le champ des intérêts de my_moods
, J'ai my_interest
, Ce qui signifie
>>> my_mood.interests.all()
[my_interest, ...]
Comment puis-je supprimer my_interest
De my_mood
Sans supprimer aucune instance de modèle? En d'autres termes, comment puis-je supprimer la relation sans affecter les modèles associés?
my_mood.interests.remove(my_interest)
Remarque: vous devrez peut-être obtenir une instance de my_mood
et my_interest
en utilisant API QuerySet de Django avant de pouvoir exécuter ce code.
Si vous devez supprimer toutes les références M2M sans toucher aux objets sous-jacents, il est plus facile de travailler dans l'autre sens:
interest.mood_set.clear()
Bien que cela ne réponde pas directement à la question du PO, il est souvent utile dans cette situation.
Dans votre cas, vous pouvez simplement effacer la relation
my_mood.interests.clear()
Alors peut-être que lorsque vous créez à nouveau une nouvelle relation dans votre sérialiseur, vous pouvez faire quelque chose comme ceci
interests = Interests.objects.get_or_create(name='Something')
my_mood_obj.tags.add(tag[0])
my_mood_obj.save()