[pyar] [Django] order_by() de un QuerySet no está funcionando como pretendo
Patricio Molina
patriciomolina en gmail.com
Mie Ene 19 12:33:33 ART 2011
2011/1/19 Ernesto Savoretti <esavoretti en gmail.com>:
> Pero lamentáblemente tu lista no es de booleanos, es de floats, por lo
> cual le estás pidiendo algo que no sabe como hacer. Especulativamente,
> puede que al no tener forma de transformarlo, lo considere como un
> indeterminismo matemático y por lo tanto lo homologue a infinito y por
> eso esté adelante. Puede ser cualquier cosa, pero cláramente el
> problema es que estás intentando comparar entidades de dimensiones
> distintas.
Tenés razón en cuanto a la distinción entre un NoneType y otros tipos
de datos, pero Python sí sabe cómo ordenar listas mixtas:
In [1]: l = [5, 3, 7, 9, None, 0, 1, 31]
In [2]: l.sort()
In [3]: l
Out[3]: [None, 0, 1, 3, 5, 7, 9, 31]
In [4]: l.reverse()
In [5]: l
Out[5]: [31, 9, 7, 5, 3, 1, 0, None]
> y/o cómo puedo solucionarlo?
>
>> In [2]: [s.rating if s.rating else 0.0 for s in Saraza.objects.all()]
> (si es que realmente querés que None equivalga a 0.0)
>
> Algo al estilo de:
>>>> [x if x else "@" for x in [1.0, 3.2, "lala", 0.0, 41, None, 7]]
> [1.0, 3.2, 'lala', '@', 41, '@', 7]
>
> O, si en vez de list comprehensions preferís/te resulta más claro usar map:
>>>> map(lambda x: x if x else "@", [1.0, 3.2, "lala", 0.0, 41, None, 7])
> [1.0, 3.2, 'lala', '@', 41, '@', 7]
Estaba buscando una solución manteniendo la devolución de un QuerySet
por parte del manager, si no sería un despropósito total al perder el
ORM fortísimo que viene con Django.
Estuve probando con algunos .extra()[0], sin éxito todavía, pero creo
que la solución está ahí.
Saludos
[0] http://docs.djangoproject.com/en/dev/ref/models/querysets/#extra
More information about the pyar
mailing list