ManyToManyField está vacío en la función post_save ()

Cuando se agrega un nuevo registro a una tabla, tengo que ejecutar una statement SQL en una base de datos externa. Esta consulta incluye el uso de un ManyToManyField. Así que acabo de conectar la función de esta manera:

post_save.connect(post_save_mymodel, sender=MyModel) 

Y en mi función post_save_mymodel (), esto es lo que hago:

 def post_save_mymodel(sender, instance, created, *args, **kwargs): if created: for e in instance.my_m2mfield.all(): # Query including "e". 

Pero, muy mal, instance.my_m2mfield.all () siempre está vacío! ¡A pesar de que deberían contener algunos elementos! Traté de obtener el nuevo elemento haciendo

 new_element = MyModel.objects.get(pk=instance.pk) 

pero no cambia nada, todavía tengo el mismo problema …

¿Wny ayuda / consejo?

Esto se debe a que primero guarda su instancia y después de eso le agrega relaciones m2m. Así es como funcionan los campos ManyToMany en los modelos de datos de Django. Django necesita saber el ID de los elementos que deben estar conectados con relaciones m2m.

Creo que tu código se ve así:

 instance = MyModel.objects.create(some_field=some_value) # post save signal triggered here instance.my_m2mfield = my_set_of_m2m_models 

django.db.models.signals.m2m_changed conectar su controlador a la señal django.db.models.signals.m2m_changed . Ver los documentos . Por ejemplo:

 def post_save_mymodel(sender, instance, action, reverse, *args, **kwargs): if action == 'post_add' and not reverse: for e in instance.my_m2mfield.all(): # Query including "e" m2m_changed.connect(post_save_mymodel, sender=MyModel.my_m2mfield.through)