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.

gadss
fonte

Respostas:

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

Observe o -antes check_in.

Documentação do Django

Keith
fonte
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

Leonardo.Z
fonte
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()
Patrick
fonte
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]
anjaneyulubatta505
fonte
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')
PaVen Nguyen
fonte
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',)
Thomas Turner
fonte
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.

Vishvajit Pathak
fonte
1

Isso está funcionando para mim.

latestsetuplist = SetupTemplate.objects.order_by('-creationTime')[:10][::1]
Manish Gupta
fonte
-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

user13061886
fonte
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