conjunto de consultas django order_by, ascendente y descendente

290

¿Cómo puedo ordenar descendiendo mi conjunto de consultas en django por fecha?

Reserved.objects.all().filter(client=client_id).order_by('check_in')

Solo quiero filtrar de descender todos los reservados por fecha check_in.

gadss
fuente

Respuestas:

554
Reserved.objects.filter(client=client_id).order_by('-check_in')

Note el -antes check_in.

Documentación de Django

Keith
fuente
models.somModalName.all (). order_b ('- date / time')
Shedrack
1
-antes del nombre de la columna significa orden descendente sin -media ascendente.
Llamar a Mar
69
Reserved.objects.filter(client=client_id).order_by('-check_in')

Un guión "-" delante de "check_in" indica un orden descendente. El orden ascendente está implícito.

No tenemos que agregar un todo () antes del filtro (). Eso todavía funcionaría, pero solo necesita agregar all () cuando desea todos los objetos del QuerySet raíz.

Más sobre esto aquí: https://docs.djangoproject.com/en/dev/topics/db/queries/#retrieving-specific-objects-with-filters

Leonardo.Z
fuente
3
Más limpio que la respuesta aceptada, no hay razón para tener .all (). Filter (xxx).
Luke Dupin
19

También puede usar las siguientes instrucciones:

Reserved.objects.filter(client=client_id).order_by('check_in').reverse()
Patricio
fuente
44
Puede, pero sospecho firmemente que sería más eficiente dejar que el servidor SQL maneje el orden, al menos en teoría. Sin embargo, es agradable y claro.
Michael Scheper
1
@ MichaelScheper sí, eso es seguro. Además, .all().filter()no es necesario. .filter()solo está bien.
Sam Creamer
14

para orden ascendente:

Reserved.objects.filter(client=client_id).order_by('check_in')

para orden descendente:

1.  Reserved.objects.filter(client=client_id).order_by('-check_in')

o

2.  Reserved.objects.filter(client=client_id).order_by('check_in')[::-1]
anjaneyulubatta505
fuente
1
¿Por qué alguien querría usar el segundo método?
MichaelR
Esa es una de las opciones disponibles. Pero, un mejor enfoque es usar el primer método.
anjaneyulubatta505
12

Funciona eliminando .all():

Reserved.objects.filter(client=client_id).order_by('-check_in')
PaVen Nguyen
fuente
3
Esto es esencialmente idéntico a la respuesta de @leonardo-z, ¿no es así?
Michael Scheper
7

Agregar el - lo ordenará en orden descendente. También puede configurar esto agregando un orden predeterminado al meta de su modelo. Esto significa que cuando haces una consulta, solo haces MyModel.objects.all () y saldrá en el orden correcto.

class MyModel(models.Model):

    check_in = models.DateField()

    class Meta:
        ordering = ('-check_in',)
Thomas Turner
fuente
3
  1. Orden ascendente

    Reserved.objects.all().filter(client=client_id).order_by('check_in')
  2. Orden descendiente

    Reserved.objects.all().filter(client=client_id).order_by('-check_in')

- (guión) se utiliza para indicar el orden descendente aquí.

Vishvajit Pathak
fuente
1

Esto es trabajo para mí.

latestsetuplist = SetupTemplate.objects.order_by('-creationTime')[:10][::1]
Manish Gupta
fuente
-1

67

Reserved.objects.filter (client = client_id) .order_by ('- check_in')

'-' indica orden descendente y para orden ascendente solo da el atributo de clase

usuario13061886
fuente
1
Por favor, brinde más contexto para sus preguntas
Iman
Hola, bienvenido en StackOverflow, revise su respuesta, formateela correctamente, explíquela (¿qué es este "67" en la parte superior ???); puede consultar stackoverflow.com/help/how-to-answer para aprender a escribir una respuesta "buena"
Pierre