[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