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.

Respuestas:


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

Note el -antes check_in.

Documentación de Django


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


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()

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]

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')

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',)

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í.


1

Esto es trabajo para mí.

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

-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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.