Django quitar objeto de ManyToMany relación
¿Cómo eliminaría un objeto de una relación de Muchos a Muchos sin eliminar el objeto real?
Ejemplo:
Tengo los modelos Moods
y Interest
.
'Estado de ánimo' tiene un campo de muchos a muchos interests
(que es un models.ManyToManyField(Interest)
).
Creo una instancia de Moods
llamada my_mood
. En el campo de intereses de my_moods tengo my_interest
, lo que significa
>>> my_mood.interests.all()
[my_interest, ...]
¿Cómo elimino my_interest de my_mood sin eliminar ninguna instancia del modelo? En otras palabras, ¿cómo puedo eliminar la relación sin afectar los modelos relacionados?
3 answers
my_mood.interests.remove(my_interest)
Nota: es posible que tenga que obtener una instancia de my_mood
y my_interest
usando la API QuerySet de Django antes de poder ejecutar este código.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-15 11:04:20
Si necesita eliminar todas las referencias M2M sin tocar los objetos subyacentes, es más fácil trabajar desde la otra dirección:
interest.mood_set.clear()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-05 07:02:27
En su caso, simplemente puede borrar la relación
my_mood.interests.clear()
Entonces, tal vez cuando vuelva a crear una nueva relación en su serializador, pueda hacer algo como esto
interests = Interests.objects.get_or_create(name='Something')
my_mood_obj.tags.add(tag[0])
my_mood_obj.save()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-15 06:18:08