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.

Gadss
quelle

Antworten:

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

Beachten Sie das -vorher check_in.

Django-Dokumentation

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

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

Vishvajit Pathak
quelle
1

Das funktioniert bei mir.

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

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