[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