conjunto de consultas do django order_by, ascendente e descendente


287

Como posso fazer um pedido decrescente da minha consulta definida no django por data?

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

Eu só quero filtrar de descendente todo o Reservado por data de check_in.

Respostas:


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

Observe o -antes check_in.

Documentação do Django


models.somModalName.all (). order_b ('- date / time')
Shedrack

1
-antes do nome da coluna significa ordem decrescente sem -média crescente.
CallMarl

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

Um hífen "-" na frente de "check_in" indica a ordem decrescente. A ordem crescente está implícita.

Não precisamos adicionar um all () antes do filter (). Isso ainda funcionaria, mas você só precisará adicionar all () quando desejar todos os objetos do QuerySet raiz.

Mais sobre isso aqui: https://docs.djangoproject.com/en/dev/topics/db/queries/#retrieving-specific-objects-with-filters


3
Mais limpo que a resposta aceita, não há razão para ter. Todos (). Filtro (xxx).
precisa

19

Você também pode usar as seguintes instruções:

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

4
Você pode, mas suspeito fortemente que seja mais eficiente deixar o servidor SQL lidar com a ordem, pelo menos em teoria. É bom e claro, no entanto.
22316 Michael Scheper

1
@MichaelScheper sim, isso é certo. Além disso, .all().filter()não é necessário. .filter()sozinho está bem.
Sam Creamer

14

para ordem crescente:

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

por ordem decrescente:

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

ou

2.  Reserved.objects.filter(client=client_id).order_by('check_in')[::-1]

1
Por que alguém iria querer usar o segundo método?
precisa

Essa é uma das opções disponíveis. Mas, uma abordagem melhor é usar o primeiro método.
anjaneyulubatta505

12

Trabalha removendo .all():

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

3
Isso é essencialmente idêntico à resposta de @ leonardo-z, não é?
22316 Michael Scheper

7

Adicionar o - ordenará em ordem decrescente. Você também pode definir isso adicionando uma ordem padrão à meta do seu modelo. Isso significa que, quando você faz uma consulta, apenas MyModel.objects.all () e ela sai na ordem correta.

class MyModel(models.Model):

    check_in = models.DateField()

    class Meta:
        ordering = ('-check_in',)

3
  1. Ordem ascendente

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

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

- (hífen) é usado para indicar a ordem decrescente aqui.


1

Isso está funcionando para mim.

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

-1

67

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

'-' is indica ordem decrescente e, para ordem crescente, dê apenas o atributo de classe


1
Por favor, forneça mais contexto para suas perguntas
iman

Olá, seja bem-vindo ao StackOverflow, analise sua resposta, formate-a corretamente, explique-a (o que é esse "67" na parte superior ???); você pode consultar stackoverflow.com/help/how-to-answer para aprender a escrever uma resposta "boa"
Pierre
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.