Подтвердить что ты не робот

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

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

Пример:

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

Mood много-много-много models.ManyToManyField(Interest) interests (это models.ManyToManyField(Interest)).

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

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

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

4b9b3361

Ответ 1

my_mood.interests.remove(my_interest)

Django Relations Docs

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

Ответ 2

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

interest.mood_set.clear()

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

Ответ 3

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

my_mood.interests.clear()

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

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