[pyar] [django] Duda con signals y m2m

Alessandro Odetti aodetti en gmail.com
Mie Oct 12 08:55:28 ART 2016


pdta: creo que desde el punto de vista de diseño de objetos esta es la
solución correcta, ya que encapsula el comportamiento, quien lo usa no sabe
ni le interesa como está implementado por dentro, si es un m2m u otra cosa

El 12 de octubre de 2016, 8:53, Alessandro Odetti <aodetti en gmail.com>
escribió:

>
> Desde mi punto de vista, no estas realmente pidiendo eso, pq estas
> haciendo save() mas de una vez, por lo tanto no creo que encuentres una
> forma muy prolija...
> Yo lo que haria es separar un método para agregar solo las relaciones en
> vez de usar directamente el add del field m2m, y que se ejecute con una
> lista o queryset vacio si no tiene nada para agregar (pero este metodo se
> ejecuta igual cuando no hay categorias por agregar, no como con m2m.add
> !!).
> Entonces quedaría algo como esto:
>
> Class ModelLoco():
>     def agregarCats(cats_a_agregar):
>         if cats_a_agregar:
>             #agrego al m2m
>         # en esta parte ejecuto la parte de notificationes, notificando a
> quien corresponda, segun las cats o no que tenga
>
>
> El 12 de octubre de 2016, 8:46, Varela Matias <matu.varela en gmail.com>
> escribió:
>
>> @Juan, pinta lindo, pero no viene las 'areas' seleccionadas en el kwargs
>> del save. Creo que el save no es el lugar para ejecutar la notificación ya
>> que no tengo "todo" guardado (respecto a las m2m)
>>
>> @Daniel
>> "-si puede NO tener relaciones mediante ese m2m ¿cómo se relacionarían
>> para hacer algo con él? (o si es en el modelo "padre" ¿no te sirve el
>> post_save?)"
>> El post_save no sirve porque en ese momento, "no sé" si seleccionó o no
>> algún 'área' (el modelo m2m), y por lo tanto no puedo llamar al método
>> porque me falta información. ¿me explico? Ese método (una notificación)
>> TIENE que saber si se seleccionaron áreas o no.
>>
>> "-Si las tiene -las crea- ¿porqué no se dispara m2m_changed?"
>> Si se dispara cuando se han seleccionado elementos relacionados m2m, el
>> problema es cuando NO se ha hecho, ya que igualmente se debe ejecutar ese
>> método.
>>
>> @Ezequiel esto es lo que terminé haciendo ayer, pero como bien decis, no
>> estoy convencido de que sea la mejor opción.
>>
>> Basicamente, busco la respuesta a:
>> Ok django, necesito que me avises cuando hayas guardado el modelo, sus
>> relaciones y TODO, así hago esto que necesito hacer!
>>
>> Saludos
>>
>> El mié., 12 oct. 2016 a las 7:41, Ezequiel Golub (<
>> ezequiel.golub en gmail.com>) escribió:
>>
>> Lo que hice para un proyecto chico es tener una tarea en celery con
>> countdown de 30 segundos, disparada por el post_save. Es medio sucio, y si
>> fuera a tener mucho tráfico cada formulario seguro voy a tener problemas
>> pero necesitaba solucionarlo rápido. Lo que hace esto es demorar la
>> ejecución por 30 segundos, lo cual le da tiempo a Django de terminar de
>> guardar todo, entonces vos volves a interrogar la bbdd para ver el nuevo
>> estado y ahí decidís que hacer. También podes hookear el pre_save, guardar
>> el estado anterior y pasárselo al task de celery para poder inspeccionar
>> los cambios.
>> Lo use para mandar un resumen de "usuarios asignados y desafinados" a
>> cierto proyecto.
>>
>> Abz
>>
>> Eze
>> El El mar, 11 de oct. de 2016 a las 16:27, Daniel <
>> dmlistapython 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
>>
>>
>> No termino de entender el problema
>> -si puede NO tener relaciones mediante ese m2m ¿cómo se relacionarían
>> para hacer algo con él? (o si es en el modelo "padre" ¿no te sirve el
>> post_save?)
>> -Si las tiene -las crea- ¿porqué no se dispara m2m_changed?
>>
>>
>> _______________________________________________
>> 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
>>
>> _______________________________________________
>> 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
>>
>>
>> _______________________________________________
>> 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 -   *
>
> El 12 de octubre de 2016, 8:46, Varela Matias <matu.varela en gmail.com>
> escribió:
>
>> @Juan, pinta lindo, pero no viene las 'areas' seleccionadas en el kwargs
>> del save. Creo que el save no es el lugar para ejecutar la notificación ya
>> que no tengo "todo" guardado (respecto a las m2m)
>>
>> @Daniel
>> "-si puede NO tener relaciones mediante ese m2m ¿cómo se relacionarían
>> para hacer algo con él? (o si es en el modelo "padre" ¿no te sirve el
>> post_save?)"
>> El post_save no sirve porque en ese momento, "no sé" si seleccionó o no
>> algún 'área' (el modelo m2m), y por lo tanto no puedo llamar al método
>> porque me falta información. ¿me explico? Ese método (una notificación)
>> TIENE que saber si se seleccionaron áreas o no.
>>
>> "-Si las tiene -las crea- ¿porqué no se dispara m2m_changed?"
>> Si se dispara cuando se han seleccionado elementos relacionados m2m, el
>> problema es cuando NO se ha hecho, ya que igualmente se debe ejecutar ese
>> método.
>>
>> @Ezequiel esto es lo que terminé haciendo ayer, pero como bien decis, no
>> estoy convencido de que sea la mejor opción.
>>
>> Basicamente, busco la respuesta a:
>> Ok django, necesito que me avises cuando hayas guardado el modelo, sus
>> relaciones y TODO, así hago esto que necesito hacer!
>>
>> Saludos
>>
>> El mié., 12 oct. 2016 a las 7:41, Ezequiel Golub (<
>> ezequiel.golub en gmail.com>) escribió:
>>
>> Lo que hice para un proyecto chico es tener una tarea en celery con
>> countdown de 30 segundos, disparada por el post_save. Es medio sucio, y si
>> fuera a tener mucho tráfico cada formulario seguro voy a tener problemas
>> pero necesitaba solucionarlo rápido. Lo que hace esto es demorar la
>> ejecución por 30 segundos, lo cual le da tiempo a Django de terminar de
>> guardar todo, entonces vos volves a interrogar la bbdd para ver el nuevo
>> estado y ahí decidís que hacer. También podes hookear el pre_save, guardar
>> el estado anterior y pasárselo al task de celery para poder inspeccionar
>> los cambios.
>> Lo use para mandar un resumen de "usuarios asignados y desafinados" a
>> cierto proyecto.
>>
>> Abz
>>
>> Eze
>> El El mar, 11 de oct. de 2016 a las 16:27, Daniel <
>> dmlistapython 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
>>
>>
>> No termino de entender el problema
>> -si puede NO tener relaciones mediante ese m2m ¿cómo se relacionarían
>> para hacer algo con él? (o si es en el modelo "padre" ¿no te sirve el
>> post_save?)
>> -Si las tiene -las crea- ¿porqué no se dispara m2m_changed?
>>
>>
>> _______________________________________________
>> 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
>>
>> _______________________________________________
>> 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
>>
>>
>> _______________________________________________
>> 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 -   *
>



-- 
*- Alessandro Odetti -   *
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20161012/06dd032d/attachment-0001.html>


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