Jak zrobić filtrowanie mniejsze lub równe w zestawie zapytań Django?


175

Próbuję filtrować użytkowników według niestandardowego pola w każdym profilu użytkownika o nazwie profil. To pole nazywa się poziomem i jest liczbą całkowitą z przedziału od 0 do 3.

Jeśli filtruję za pomocą równości, otrzymuję listę użytkowników z wybranym poziomem zgodnie z oczekiwaniami:

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

Kiedy próbuję filtrować, używając mniej niż:

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

Wyskakuje mi błąd:

nazwa globalna „userprofile__level” nie jest zdefiniowana

Czy istnieje sposób na filtrowanie według <lub>, czy też szczekam na niewłaściwe drzewo.


2
@ BéresBotond Chociaż dokumenty wyglądają świetnie - struktura i układ są tak słabe, że bez bezpośredniego linku wszystkie są bezużyteczne
RunLoop

@ BéresBotond Niestety ten link jest teraz martwy :(
dKen

Odpowiedzi:


337

Mniejsze lub równe:

User.objects.filter(userprofile__level__lte=0)

Większe lub równe:

User.objects.filter(userprofile__level__gte=0)

Podobnie ltza mniej niż i gtza więcej niż. Znajdziesz je wszystkie w dokumentacji .


2
Wow, to było szybkie :). Działa to świetnie w przypadku mniej niż lub równych, ale co powiesz na mniej niż? (userprofile__level__lt = 3) nie działa
Finglish

1
To robi; ale w każdym przypadku możesz także zrobić wykluczenie (__ gte) zamiast filtru (__ lt).
Lakshman Prasad

2
I NIE zapominaj, że są dwa __podkreślenia
andilabs

Otrzymuję ten błąd -> {FieldError} Nieobsługiwany poziom wyszukiwania AutoField lub dołączanie do pola jest niedozwolone.
Aravind R Pillai,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.