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.

Odpowiedzi:


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

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

Dokumentacja Django


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


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()

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]

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')

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',)

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.


1

To działa dla mnie.

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

-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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.