[pyar] [Django] order_by() de un QuerySet no está funcionando como pretendo

Pablo Ziliani pablo en kultroom.com
Mie Ene 19 12:39:12 ART 2011


On 01/19/2011 02:58 AM, Ernesto Savoretti wrote:
> 2011/1/19 Patricio Molina<patriciomolina en gmail.com>:
>> Vean lo que me devuelve cuando hago un query:
>> In [1]: from saraza.models import Saraza
>> In [2]: [s.rating for s in Saraza.objects.all()]
>> Out[2]: [None, 4.0, 3.0]
>> Uno de los objetos del modelo Saraza no tiene ningún objeto del modelo
>> Rating asociado, por eso el rating es "None". No lo está ordenando como yo
>> quiero: lo que pretendo es que vaya realmente en orden descendente (por
>> ejemplo: [4.0, 3.0, ..., None, None, None] y no [None, None, None, 4.0, 3.0,
>> ...] como hace ahora.
>> Alguna idea de por qué sucede esto
> Bueno, me parece que en todo caso el problema es que pareciera que
> estás asumiendo que: None = 0.0, lo cual no parece ser el caso.
>
> (...)
>
> y/o cómo puedo solucionarlo?
>
>> In [2]: [s.rating if s.rating else 0.0 for s in Saraza.objects.all()]

El problema es que estás haciendo en python algo que sería mejor que 
haga la BBDD, además de que el resultado probablemente no le sirva 
(probablemente en la página quiera tener disponibles todos los datos de 
los Saraza(), no solo el rating)

Fijate esta solución, me pareció suficientemente elegante:
http://stackoverflow.com/questions/2572201/django-orm-ordering-w-aggregate-functions-none-special-treatment




More information about the pyar mailing list