Django queryset'te filtreden daha az veya ona eşit nasıl yapılır?


176

Profil adı verilen her kullanıcı profilindeki kullanıcıları özel bir alana göre filtrelemeye çalışıyorum. Bu alana seviye denir ve 0-3 arasında bir tamsayıdır.

Eşitliği kullanarak filtre uygularsam, beklendiği gibi seçilen düzeydeki kullanıcıların bir listesini alırım:

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

Ben daha az kullanarak filtre uygulamak çalıştığınızda:

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

Hatayı alıyorum:

'userprofile__level' genel adı tanımlanmadı

<Veya> ile filtrelemenin bir yolu var mı, yoksa yanlış ağacı havlıyor muyum?


2
@ BéresBotond Her ne kadar dokümanlar harika görünse de - yapılandırma ve düzen o kadar zayıf ki doğrudan bir bağlantı olmadan hepsi işe yaramaz
RunLoop

@ BéresBotond Maalesef bu bağlantı artık öldü :(
dKen

Yanıtlar:


338

Az veya eşit:

User.objects.filter(userprofile__level__lte=0)

Büyük veya eşit:

User.objects.filter(userprofile__level__gte=0)

Benzer şekilde, ltdaha küçük ve gtdaha büyük için. Hepsini belgelerde bulabilirsiniz .


2
Vay canına, bu hızlıydı :). Bu, daha küçük veya eşit için harika çalışır, ancak daha azına ne dersiniz? (userprofile__level__lt = 3) işe yaramıyor
Finglish

1
Öyle; ancak her durumda filtre (__ lt) yerine hariç tutma (__ gte) da yapabilirsiniz.
Lakshman Prasad

2
Ve iki __alt
çizginin

Bu hatayı alıyorum -> {FieldError} Desteklenmeyen arama için 'seviye' Otomatik Alan veya sahaya katılma izni yok.
Aravind R Pillai
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.