[pyar] [Django] order_by() de un QuerySet no está funcionando como pretendo
Patricio Molina
patriciomolina en gmail.com
Mie Ene 19 01:46:29 ART 2011
Buenas lista, tengo un problemita con el orden de un QuerySet en Django
(1.1) que les paso a describir.
Tengo un modelo "Saraza" y un modelo "Rating". Lo relevante de "Rating" es
que tiene un campo "score", que es un PositiveSmallIntegerField(). Hasta acá
nada raro.
El modelo "Rating", a su vez, tiene una relación "muchos a uno" con el
modelo Saraza (saraza = models.ForeignKey(Saraza))
En Saraza tengo un custom manager llamado SarazaManager, este es el código:
class SarazaManager(models.Manager):
"""
Custom manager for Saraza model
"""
def get_query_set(self):
return super(SarazaManager, self).get_query_set()\
.annotate(rating=Avg('rating__score'),
score_count=Count('rating__score'))\
.order_by('-rating', 'name')
Como ven, lo que hace un par de agregaciones que las anota como atributos de
cada objeto del modelo (.rating y .score_count, uno es un Avg() y el otro un
Count())
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 y/o cómo puedo solucionarlo?
Saludos
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20110119/7917b190/attachment.html>
More information about the pyar
mailing list