Django удаляет объект из отношений ManyToMany - PullRequest
85 голосов
/ 13 июня 2011

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

Пример:

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

Mood имеет поле «многие ко многим» interests (то есть models.ManyToManyField(Interest)).

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

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

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

Ответы [ 3 ]

148 голосов
/ 13 июня 2011
my_mood.interests.remove(my_interest)

Документы по связям с Джанго

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

35 голосов
/ 05 мая 2017

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

interest.mood_set.clear()

Хотя это напрямую не касается вопроса ОП, это часто полезноситуация.

7 голосов
/ 15 декабря 2017

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

my_mood.interests.clear()

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

interests = Interests.objects.get_or_create(name='Something')
my_mood_obj.tags.add(tag[0])
my_mood_obj.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...