Reputation: 15765
How would I delete an object from a Many-to-Many relationship without removing the actual object?
Example:
I have the models Moods
and Interest
.
Mood
has a many-to-many field interests
(which is a models.ManyToManyField(Interest)
).
I create an instance of Moods
called my_mood
. In my_moods
's interests field I have my_interest
, meaning
>>> my_mood.interests.all()
[my_interest, ...]
How do I remove my_interest
from my_mood
without deleting either model instance? In other words, how do I remove the relationship without affecting the related models?
Upvotes: 197
Views: 177585
Reputation: 145
model.field.remove(object_you_want_to_remove)
In this case use: my_mood.interests.remove(my_interest)
Upvotes: -1
Reputation: 31951
my_mood.interests.remove(my_interest)
Note: you might have to get an instance of my_mood
and my_interest
using Django's QuerySet API before you can execute this code.
Upvotes: 304
Reputation: 15371
If you need to remove all M2M references without touching the underlying objects, it's easier to work from the other direction:
interest.mood_set.clear()
While this does not directly address the OP's question, it's often useful in this situation.
Upvotes: 132
Reputation: 1554
In your case you can simply clear the relationship
my_mood.interests.clear()
Then perhaps when you are again creating new relation in your serializer you can do something like this
interests = Interests.objects.get_or_create(name='Something')
my_mood_obj.tags.add(tag[0])
my_mood_obj.save()
Upvotes: 26