Как сделать фильтр меньше или равным в наборе запросов Django?


176

Я пытаюсь отфильтровать пользователей по настраиваемому полю в каждом профиле пользователя, называемом профилем. Это поле называется уровнем и является целым числом от 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

Ответы:


338

Меньше или равно:

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} Неподдерживаемый поиск 'level' для AutoField или присоединение к полю не разрешено.
Аравинд Р Пиллаи
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.