zestaw zapytań django order_by, rosnąco i malejąco

287

Jak mogę zamówić, opuszczając zestaw zapytań w django według daty?

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

Chcę tylko odfiltrować od zejścia wszystkie Zarezerwowane według daty check_in.

Gadss
źródło

Odpowiedzi:

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

Zwróć uwagę na -wcześniej check_in.

Dokumentacja Django

Keith
źródło
models.somModalName.all (). order_b ('- data / czas')
Shedrack
1
-przed nazwą kolumny oznacza kolejność malejącą bez -średniej wysokości.
CallMarl
69
Reserved.objects.filter(client=client_id).order_by('-check_in')

Łącznik „-” przed „check_in” oznacza kolejność malejącą. Sugerowana jest kolejność rosnąca.

Nie musimy dodawać all () przed filter (). To nadal działałoby, ale musisz dodać all () tylko wtedy, gdy chcesz wszystkie obiekty z głównego QuerySet.

Więcej na ten temat tutaj: https://docs.djangoproject.com/en/dev/topics/db/queries/#retrieving-specific-objects-with-filters

Leonardo.Z
źródło
3
Czystszy niż zaakceptowana odpowiedź, nie ma powodu, aby mieć .all (). Filter (xxx).
Luke Dupin
19

Możesz także użyć następującej instrukcji:

Reserved.objects.filter(client=client_id).order_by('check_in').reverse()
Patrick
źródło
4
Możesz, ale mocno podejrzewam, że bardziej wydajne jest pozwolenie serwerowi SQL na obsługę zamówienia, przynajmniej teoretycznie. Jest to jednak miłe i jasne.
Michael Scheper,
1
@MichaelScheper tak, to na pewno. Również .all().filter()nie jest konieczne. .filter()sam jest w porządku.
Sam Creamer,
14

w porządku rosnącym:

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

dla porządku malejącego:

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

lub

2.  Reserved.objects.filter(client=client_id).order_by('check_in')[::-1]
anjaneyulubatta505
źródło
1
Dlaczego ktokolwiek miałby chcieć skorzystać z drugiej metody?
MichaelR
To jeden z dostępnych wyborów. Ale lepszym podejściem jest zastosowanie pierwszej metody.
anjaneyulubatta505
12

Działa usuwając .all():

Reserved.objects.filter(client=client_id).order_by('-check_in')
PaVen Nguyen
źródło
3
Jest to w zasadzie identyczna z odpowiedzią @ leonardo-z, prawda?
Michael Scheper,
7

Dodanie - spowoduje uporządkowanie w kolejności malejącej. Możesz to również ustawić, dodając domyślną kolejność do meta twojego modelu. Oznacza to, że kiedy wykonasz zapytanie, po prostu wykonasz MyModel.objects.all () i pojawi się ono we właściwej kolejności.

class MyModel(models.Model):

    check_in = models.DateField()

    class Meta:
        ordering = ('-check_in',)
Thomas Turner
źródło
3
  1. Rosnąco

    Reserved.objects.all().filter(client=client_id).order_by('check_in')
  2. Kolejność malejąca

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

- (łącznik) służy tutaj do wskazania kolejności malejącej.

Vishvajit Pathak
źródło
1

To działa dla mnie.

latestsetuplist = SetupTemplate.objects.order_by('-creationTime')[:10][::1]
Manish Gupta
źródło
-1

67

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

„-” oznacza kolejność malejącą, a dla kolejności malejącej wystarczy podać atrybut klasy

użytkownik13061886
źródło
1
Podaj więcej kontekstu dla swoich pytań
iman
Cześć, witamy na StackOverflow, proszę przejrzyj swoją odpowiedź, sformatuj ją poprawnie, wyjaśnij (co to jest „67” na górze ???); możesz odnieść się do stackoverflow.com/help/how-to-answer, aby dowiedzieć się, jak napisać „dobrą” odpowiedź
Pierre