Bagaimana cara menyaring kurang dari atau sama dengan di queryset Django?


175

Saya mencoba memfilter pengguna dengan bidang khusus di setiap profil pengguna yang disebut profil. Bidang ini disebut level dan bilangan bulat antara 0-3.

Jika saya memfilter menggunakan equals, saya mendapatkan daftar pengguna dengan level yang dipilih seperti yang diharapkan:

user_list = User.objects.filter(userprofile__level = 0)

Ketika saya mencoba memfilter menggunakan kurang dari:

user_list = User.objects.filter(userprofile__level < 3)

Saya mendapatkan kesalahan:

nama global 'userprofile__level' tidak didefinisikan

Apakah ada cara untuk memfilter dengan <atau>, atau saya menggonggong pohon yang salah.


2
@ BéresBotond Meskipun dokumen tampak hebat - penataan dan tata letak sangat buruk sehingga tanpa tautan langsung, semuanya tidak berguna
RunLoop

@ BéresBotond Sayangnya tautan itu sekarang mati :(
dKen

Tautan yang berfungsi
Gaurav Pandey

Jawaban:


337

Kurang dari atau sama:

User.objects.filter(userprofile__level__lte=0)

Lebih besar atau sama:

User.objects.filter(userprofile__level__gte=0)

Demikian juga, ltkurang dari dan gtlebih besar dari. Anda dapat menemukannya di dokumentasi .


2
Wow, itu cepat :). Ini bekerja dengan baik kurang dari atau sama, tetapi bagaimana kalau kurang dari itu? (userprofile__level__lt = 3) tampaknya tidak berfungsi
Finglish

1
Itu benar; tetapi dalam hal apa pun, Anda juga dapat melakukan mengecualikan (__ gte) alih-alih filter (__ lt).
Lakshman Prasad

2
Dan jangan lupa bahwa ada dua __garis bawah
andilab

Saya mendapatkan kesalahan ini -> {FieldError} 'level' pencarian yang tidak didukung untuk AutoField atau bergabung di bidang yang tidak diizinkan.
Aravind R Pillai
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.