django order_by Abfragesatz, aufsteigend und absteigend


287

Wie kann ich bestellen, indem ich meine in Django festgelegte Abfrage nach Datum absteige?

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

Ich möchte nur filtern, ob alle Reserved by check_in-Daten absteigend sind.

Antworten:


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

Beachten Sie das -vorher check_in.

Django-Dokumentation


models.somModalName.all (). order_b ('- Datum / Uhrzeit')
Shedrack

1
-vor Spaltenname mittlere absteigende Reihenfolge ohne -mittlere aufsteigende.
CallMarl

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

Ein Bindestrich "-" vor "check_in" zeigt die absteigende Reihenfolge an. Aufsteigende Reihenfolge ist impliziert.

Wir müssen vor filter () kein all () hinzufügen. Das würde immer noch funktionieren, aber Sie müssen nur all () hinzufügen, wenn Sie alle Objekte aus dem Root-QuerySet möchten.

Mehr dazu hier: https://docs.djangoproject.com/de/dev/topics/db/queries/#retrieving-specific-objects-with-filters


3
Sauberer als die akzeptierte Antwort, kein Grund, .all (). Filter (xxx) zu haben.
Luke Dupin

19

Sie können auch die folgende Anweisung verwenden:

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

4
Sie können, aber ich vermute sehr, dass es effizienter ist, den SQL Server zumindest theoretisch die Reihenfolge abwickeln zu lassen. Es ist aber schön und klar.
Michael Scheper

1
@ MichaelScheper ja, das ist sicher. Auch .all().filter()ist nicht notwendig. .filter()allein ist in Ordnung.
Sam Creamer

14

für aufsteigende Reihenfolge:

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

für absteigende Reihenfolge:

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

oder

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

1
Warum sollte jemand jemals die 2. Methode anwenden wollen?
MichaelR

Das ist eine der verfügbaren Möglichkeiten. Ein besserer Ansatz ist jedoch die Verwendung der 1. Methode.
anjaneyulubatta505

12

Es funktioniert beim Entfernen von .all():

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

3
Dies ist im Wesentlichen identisch mit der Antwort von @ leonardo-z, nicht wahr?
Michael Scheper

7

Durch Hinzufügen des - wird es in absteigender Reihenfolge sortiert. Sie können dies auch festlegen, indem Sie dem Meta Ihres Modells eine Standardreihenfolge hinzufügen. Dies bedeutet, dass Sie bei einer Abfrage nur MyModel.objects.all () ausführen und diese in der richtigen Reihenfolge ausgeben.

class MyModel(models.Model):

    check_in = models.DateField()

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

3
  1. Aufsteigende Reihenfolge

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

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

- (Bindestrich) wird verwendet, um hier die absteigende Reihenfolge anzuzeigen.


1

Das funktioniert bei mir.

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

-1

67

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

'-' gibt die absteigende Reihenfolge an und für die aufsteigende Reihenfolge geben Sie einfach das Klassenattribut an


1
Bitte geben Sie mehr Kontext für Ihre Fragen
iman

Hallo, willkommen bei StackOverflow, bitte überprüfen Sie Ihre Antwort, formatieren Sie sie richtig, erklären Sie sie (was ist diese "67" oben ???); Unter stackoverflow.com/help/how-to-answer erfahren Sie, wie Sie eine "gute" Antwort schreiben
Pierre
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.