lo que estoy tratando de hacer es esto:
consigue los 30 Autores con mayor puntuación (
Author.objects.order_by('-score')[:30])ordenar los autores por
last_name
¿Alguna sugerencia?
python
django
django-models
RadiantHex
fuente
fuente

Respuestas:
Qué pasa
En Django 1.4 y versiones posteriores, puede ordenar proporcionando varios campos.
Referencia: https://docs.djangoproject.com/en/dev/ref/models/querysets/#order-by
order_by (* campos)
De forma predeterminada, los resultados devueltos por a
QuerySetestán ordenados por la tupla de orden dada por laorderingopción en el Meta del modelo. Puede anular esto por cada QuerySet mediante elorder_bymétodo.Ejemplo:
El resultado anterior se ordenará
scoredescendiendo y luegolast_nameascendiendo. El signo negativo delante de"-score"indica un orden descendente. El orden ascendente está implícito.fuente
lambda x: x.last_name? Es más corto, más detallado y no necesita ninguna importación.Solo quería ilustrar que las soluciones integradas (solo SQL) no siempre son las mejores. Al principio pensé que debido a que el
QuerySet.objects.order_bymétodo de Django acepta múltiples argumentos, podría encadenarlos fácilmente:Pero no funciona como cabría esperar. Por ejemplo, primero hay una lista de presidentes ordenados por puntaje (seleccionando los 5 primeros para una lectura más fácil):
Usando la solución de Alex Martelli que proporciona con precisión las 5 personas principales ordenadas por
last_name:Y ahora la
order_byllamada combinada :Como puede ver, es el mismo resultado que el primero, lo que significa que no funciona como cabría esperar.
fuente
Aquí hay una forma que permite empates para el puntaje de corte.
Puede obtener más de 30 autores en top_authors de esta manera y
min(30,author_count)existe el caso de que tenga menos de 30 autores.fuente