Як зробити фільтр менший за розмір або рівний у наборі запитів Джанго?


175

Я намагаюся фільтрувати користувачів за спеціальним полем у кожному профілі користувачів, який називається профіль. Це поле називається рівнем і є цілим числом між 0-3.

Якщо я фільтрую за рівними показниками, я отримую список користувачів із вибраним рівнем, як очікується:

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

Коли я намагаюся фільтрувати, використовуючи менше:

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

Я отримую помилку:

глобальна назва 'userprofile__level' не визначена

Чи є спосіб фільтрації за <або> чи я гавкаю неправильне дерево.


2
@ BéresBotond Хоча документи виглядають чудово - структурування та компонування настільки бідні, що без прямого зв’язку вони майже не марні
RunLoop

@ BéresBotond На жаль, посилання зараз померло :(
dKen

Робоче посилання для doc: docs.djangoproject.com/en/1.11/ref/models/querysets/#gt
Gaurav Pandey

Відповіді:


337

Менше або рівне:

User.objects.filter(userprofile__level__lte=0)

Більше або рівне:

User.objects.filter(userprofile__level__gte=0)

Аналогічно, ltдля менше і gtдля більшого. Ви можете знайти їх усі в документації .


2
Ого, це було швидко :). Це чудово працює для менших або рівних, але як щодо того, що менше? (userprofile__level__lt = 3), здається, не працює
Finglish

1
Це робить; але в будь-якому випадку ви можете також виключити (__ gte) замість фільтра (__ lt).
Лакшман Прасад

2
І НЕ забудьте, що є два __підкреслення
andilabs

Я отримую цю помилку -> {FieldError} Непідтримуваний пошук "рівень" для автополя чи приєднання до поля заборонено.
Aravind R Pillai
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.