Digamos que tengo el siguiente modelo:Solicitar un QuerySet por valor de campo agregado
class Contest:
title = models.CharField(max_length = 200)
description = models.TextField()
class Image:
title = models.CharField(max_length = 200)
description = models.TextField()
contest = models.ForeignKey(Contest)
user = models.ForeignKey(User)
def score(self):
return self.vote_set.all().aggregate(models.Sum('value'))[ 'value__sum' ]
class Vote:
value = models.SmallIntegerField()
user = models.ForeignKey(User)
image = models.ForeignKey(Image)
Los usuarios de un sitio pueden contribuir con sus imágenes a varios concursos. Luego, otros usuarios pueden votar hacia arriba o hacia abajo. Todo funciona bien, pero ahora quiero mostrar una página en la que los usuarios puedan ver todas las contribuciones a un determinado concurso. Las imágenes se ordenarán por su puntuación. Por lo tanto He intentado lo siguiente:
Contest.objects.get(pk = id).image_set.order_by('score')
Como temía que no funciona ya 'puntuación' hay un campo de base de datos que podría ser utilizado en las consultas.
¡Gran solución! :) – okoman
Estoy obteniendo los resultados desordenados ... están en su mayoría en orden, pero algunos de ellos están fuera de lugar ... ¿qué podría causar eso? – Jiaaro
Esta es la solución solo para ese caso específico, y no para el título de la pregunta: "QuerySet order by method". Esta NO es la solución para pedir un conjunto de preguntas por método: @ S.Lott response es la solución correcta para el caso genérico –