django order_by set kueri, naik dan turun


290

Bagaimana saya bisa memesan dengan menurunkan kueri saya yang diatur dalam Django berdasarkan tanggal?

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

Saya hanya ingin memfilter dari turun semua Reserved dengan tanggal check_in.

Jawaban:


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

Perhatikan -sebelumnya check_in.

Dokumentasi Django


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

1
-sebelum nama kolom berarti urutan menurun tanpa -berarti naik.
CallMarl

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

Tanda hubung "-" di depan "check_in" menunjukkan urutan menurun. Urutan naik tersirat.

Kami tidak perlu menambahkan semua () sebelum filter (). Itu masih bekerja, tetapi Anda hanya perlu menambahkan semua () ketika Anda ingin semua objek dari root QuerySet.

Lebih lanjut tentang ini di sini: https://docs.djangoproject.com/en/dev/topics/db/queries/#retrieving-specific-objects-with-filters


3
Lebih bersih dari jawaban yang diterima, tidak ada alasan untuk memiliki .all (). Filter (xxx).
Luke Dupin

19

Anda juga dapat menggunakan instruksi berikut:

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

4
Anda bisa, tetapi saya sangat curiga bahwa lebih efisien untuk membiarkan server SQL menangani pesanan, setidaknya secara teori. Itu bagus dan jelas.
Michael Scheper

1
@MichaelScheper ya, itu sudah pasti. Juga, .all().filter()tidak perlu. .filter()sendirian baik-baik saja.
Sam Creamer

14

untuk pesanan naik:

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

untuk pesanan menurun:

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

atau

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

1
Mengapa ada orang yang ingin menggunakan metode ke-2?
MichaelR

Itu salah satu pilihan yang tersedia. Namun, pendekatan yang lebih baik adalah menggunakan metode 1.
anjaneyulubatta505

12

Berhasil menghapus .all():

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

3
Ini pada dasarnya identik dengan jawaban @ leonardo-z, bukan?
Michael Scheper

7

Menambahkan - akan memesannya dalam urutan menurun. Anda juga dapat mengatur ini dengan menambahkan pemesanan default ke meta model Anda. Ini berarti bahwa ketika Anda melakukan kueri Anda hanya melakukan MyModel.objects.all () dan itu akan keluar dalam urutan yang benar.

class MyModel(models.Model):

    check_in = models.DateField()

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

3
  1. Urutan naik

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

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

- (tanda hubung) digunakan untuk menunjukkan urutan menurun di sini.


1

Ini bekerja untuk saya.

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

-1

67

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

'-' menunjukkan urutan Turun dan untuk Urutan naik hanya memberikan atribut kelas


1
Tolong beri lebih banyak konteks untuk pertanyaan Anda
iman

Hai, selamat datang di StackOverflow, tinjau jawaban Anda, format dengan benar, jelaskan (apa ini "67" di atas ???); Anda dapat merujuk ke stackoverflow.com/help/how-to-answer untuk mempelajari cara menulis jawaban "baik"
Pierre
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.