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)
Примечание: возможно, вам придется получить экземпляр 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()