[pyar] Consulta Django

Sofi Denner sofi.denner en gmail.com
Jue Jul 27 16:00:08 ART 2017


Gracias a los cuatro por sus respuestas!!
No solo pude solucionar mi problema, sino que además aprendí mucho :)

Lo que no terminé de entender es lo del prefecht... Soy medio newbie en
esto, y por ahí me falta más background. Pero puede ser que solo sirva para
relaciones 'ManyToMany' o 'ManyToOne'?

O capaz que yo estoy haciendo algo mal, por que probé haciendo:
sales_queryset.prefecht_related('date__week')

y después hice lo mismo de antes:
[sales_queryset.filter(date__week=k).aggregate(sum=Sum('kg'))['sum'] for k
in weeks_list]

Y me siguió demorando un montón (35 segundos aprox, igual que antes de
hacer ese prefecht).

Hay algo que estoy haciendo mal?

Igual pregunto de curiosa nomás, mi problema original ya lo pude resolver,
pero esto me dejó intrigada.

Un abrazo! Y gracias nuevamente.




El jue., 27 de jul. de 2017 a la(s) 15:22, nestor godoy <
licomgodoy en gmail.com> escribió:

> Hola Sofi Denner por lo que pude ver debes leer sobre
>
>
> https://docs.djangoproject.com/en/1.11/ref/models/database-functions/#extract
>
> luego hacer algo asi :
>
> sales_queryset = sales_queryset.annotate(dateweek=Extract('date', 'week'))
>
> te dara tipo :
>
> “dateweek”: 1
> “dateweek”: 1
> “dateweek”: 2
> “dateweek”: 25
>
> como se repiten debe agrupar y sumar
>
> sales_queryset.values('dateweek').annotate(sum_week=Sum('kg'))
>
>
>
> El 27 de julio de 2017, 12:29, Facundo Batista <facundobatista en gmail.com>
> escribió:
>
>> 2017-07-27 9:49 GMT-03:00 Sofi Denner <sofi.denner en gmail.com>:
>> > Buen día lista! Les hago una pregunta de Django, que no estoy pudiendo
>> > resolver:
>> > Existe alguna forma de hacer algo parecido a esto?:
>> >
>> > sales_queryset.values('date__week').annotate(sum_week=Sum('kg'))
>> >
>> > La idea es agrupar la suma de todos los kg vendidos por semana. La
>> parte que
>> > falla es la de ".values('date__week')". Colocando ".values('date')"
>> > funciona, pero por supuesto, agrupa las ventas por día y no por semana.
>> >
>> > Hasta ahora la forma de "solucionarlo" que se me ocurrió es haciendo:
>> >
>> > [sales_queryset.filter(date__week=k).aggregate(sum=Sum('kg'))['sum']
>> for k
>> > in weeks_list]
>> >
>> > Pero esta forma es suuuuper ineficiente.
>> >
>> > Alguien me tira alguna idea de cómo resolverlo?
>>
>> ¿Por qué es super ineficiente? ¿Porque al iterar estás yendo mucho a la
>> DB?
>>
>> Y si prefetcheas los atributos relacionados? de esta manera traería
>> todo de un golpe, y ya
>>
>>
>> https://docs.djangoproject.com/en/1.11/ref/models/querysets/#prefetch-related
>>
>> Saludos!
>>
>> --
>> .    Facundo
>>
>> Blog: http://www.taniquetil.com.ar/plog/
>> PyAr: http://www.python.org/ar/
>> Twitter: @facundobatista
>> _______________________________________________
>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>> Sitio web: http://www.python.org.ar/
>>
>> Para administrar la lista (o desuscribirse) entrar a
>> http://listas.python.org.ar/listinfo/pyar
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>>
>
> _______________________________________________
> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> Sitio web: http://www.python.org.ar/
>
> Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
>
> 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/20170727/821d55b0/attachment.html>


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