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.

Finglish
sumber
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 .

Lakshman Prasad
sumber
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