Django удаление объекта из отношений ManyToMany

Как удалить объект из отношения "многие ко многим" без удаления фактического объекта?

пример:

у меня есть модели Moods и Interest.

"настроение" имеет много для многих поле interests (это models.ManyToManyField(Interest)).

Я создаю экземпляр Moods под названием my_mood. В поле интересов my_moods у меня есть my_interest, что означает

>>> my_mood.interests.all()
[my_interest, ...]

Как удалить my_interest из my_mood без удаление любого экземпляра модели? Другими словами, Как удалить отношения, не затрагивая связанные модели?

3 ответов


my_mood.interests.remove(my_interest)

отношения Джанго Docs

Примечание: возможно, вам придется получить экземпляр my_mood и my_interest используя API запросов Django прежде чем вы можете выполнить этот код.


Если вам нужно удалить все ссылки M2M, не касаясь базовых объектов, проще работать с другого направления:

interest.mood_set.clear()

в вашем случае вы можете просто очистить отношения

my_mood.interests.clear()

тогда, возможно, когда вы снова создаете новое отношение в своем сериализаторе, вы можете сделать что-то вроде этого

interests = Interests.objects.get_or_create(name='Something')
my_mood_obj.tags.add(tag[0])
my_mood_obj.save()