django order_by set di query, crescente e decrescente


290

Come posso ordinare decrescente il mio set di query in django per data?

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

Voglio solo filtrare dalla discesa di tutti i Riservati entro data check_in.

Risposte:


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

Si noti il -prima check_in.

Documentazione Django


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

1
-prima del nome della colonna significa ordine decrescente senza -media crescente.
Chiama il

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

Un trattino "-" davanti a "check_in" indica l'ordine decrescente. L'ordine crescente è implicito.

Non è necessario aggiungere un filtro all () prima di (). Funzionerebbe ancora, ma devi solo aggiungere tutto () quando vuoi tutti gli oggetti dal QuerySet di root.

Maggiori informazioni qui: https://docs.djangoproject.com/en/dev/topics/db/queries/#retrieving-specific-objects-with-filters


3
Più pulito della risposta accettata, nessun motivo per avere .all (). Filter (xxx).
Luke Dupin

19

Puoi anche usare le seguenti istruzioni:

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

4
Puoi, ma sospetto fortemente che sia più efficiente lasciare che il server SQL gestisca l'ordine, almeno in teoria. È bello e chiaro, però.
Michael Scheper,

1
@MichaelScheper sì, questo è sicuro. Inoltre, .all().filter()non è necessario. .filter()da solo va bene.
Sam Creamer

14

per ordine crescente:

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

per ordine decrescente:

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
Perché qualcuno dovrebbe mai voler usare il secondo metodo?
Michael R

Questa è una delle scelte disponibili. Ma un approccio migliore è usare il 1o metodo.
anjaneyulubatta505,

12

Funziona rimuovendo .all():

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

3
Questo è essenzialmente identico alla risposta di @ leonardo-z, non è vero?
Michael Scheper,

7

Aggiungendo il - lo ordinerà in ordine decrescente. Puoi anche impostarlo aggiungendo un ordine predefinito alla meta del tuo modello. Ciò significa che quando esegui una query fai semplicemente MyModel.objects.all () e uscirà nell'ordine corretto.

class MyModel(models.Model):

    check_in = models.DateField()

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

3
  1. Ordine ascendente

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

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

- (trattino) viene utilizzato per indicare l'ordine decrescente qui.


1

Questo funziona per me.

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

-1

67

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

'-' indica l'ordine decrescente e per l'ordine crescente basta dare l'attributo di classe


1
Per favore, dai più contesto alle tue domande
iman

Ciao, benvenuto su StackOverflow, rivedi la tua risposta, formattala correttamente, spiegala (che cos'è questo "67" in alto ???); puoi fare riferimento a stackoverflow.com/help/how-to-answer per imparare a scrivere una "buona" risposta
Pierre
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.