[pyar] [django] Duda con signals y m2m

Juan Carizza juan.carizza en gmail.com
Mar Oct 11 12:57:10 ART 2016


Hola Matias. No soy partidario de utilizar signals para tareas que no sean
triviales (incrementar un contador, invalidar alguna cache, etc). Se mete
código en lugares dificiles de encontrar, es dificil controlar cuando se
disparan, no tienen orden de ejecución (al menos en django 1.5), cuando
cargas info a la DB desde fixtures tenes que acordarte de disparar las
signals si usas bulk_insert.

Si la relacion m2m no cambia lo lógico es que tu función bindeada a
m2m_changed no se ejecute porque no tiene nada que hacer, todo sige igual.

Lo último que ejecutas es el model.save() luego de haber echo los
model.elfieldm2m.add(modelrelacionado), entonces sobre-escribis el método
"save" del modelo y ahí ejecutas todo lo que necesites [0]

[0]
https://docs.djangoproject.com/es/1.9/topics/db/models/#overriding-model-methods






El mar., 11 oct. 2016 a las 12:41, Alessandro Odetti (<aodetti en gmail.com>)
escribió:

> Hola creo que deberías brindar un poco mas de info acerca de que es lo que
> haces después del save y en cuando debe y cuando no ser ejecutado.
> Por ejemplo, cuando es necesario ejecutarlo si no tiene otros modelos
> relacionados, o cuando es necesario ejecutarlo solo si tiene relaciones, o
> si el método se pudiera ejecutar en ambos casos, bindeandolo tanto al
> m2m_changed como al post_save...
>
>
>
> El 11 de octubre de 2016, 12:17, Varela Matias <matu.varela en gmail.com>
> escribió:
>
> Buenas, tengo este problema:
>
> Necesito llamar a un método de un modelo de django luego de que este se
> guarda. Este modelo tiene un m2m a otro, por lo que bindee al signal
> m2m_changed para que se ejecute ese método (el post_save no me sirve porque
> aún no tiene las relaciones m2m guardadas)
>
> El tema es que puede no tener relaciones mediente ese m2m, por lo que ese
> signal nunca se dispara.
>
> Se me ocurrió añadir un task en celery para que ejecute ese método luego
> de que todo está guardado, y creo que funcionaría, pero quizás habia alguna
> forma de hacer esto sin celery.
>
> ¿Hay manera de llamar a un método luego de que TODO es salvado en la db?
> ¿se les ocurre otra forma más "djangera" de hacer esto?
>
> Saludos y gracias de antemano
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
>
>
>
> --
> *- Alessandro Odetti -   *
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20161011/58383245/attachment.html>


Más información sobre la lista de distribución pyar