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.

Gads
sumber

Jawaban:

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

Perhatikan -sebelumnya check_in.

Dokumentasi Django

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

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

Vishvajit Pathak
sumber
1

Ini bekerja untuk saya.

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

67

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

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

pengguna13061886
sumber
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