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

176

Я пытаюсь отфильтровать пользователей по настраиваемому полю в каждом профиле пользователя, называемом профилем. Это поле называется уровнем и является целым числом от 0 до 3.

Если я фильтрую, используя равные, я получаю список пользователей с выбранным уровнем, как и ожидалось:

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

Когда я пытаюсь фильтровать, используя меньше чем:

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

Я получаю ошибку:

глобальное имя 'userprofile__level' не определено

Есть ли способ отфильтровать по <или>, или я лаю не на том дереве.

Finglish
источник
2
@ BéresBotond Хотя документы выглядят великолепно - структурирование и макет настолько скудны, что без прямой ссылки они практически бесполезны
RunLoop
@ BéresBotond К сожалению, эта ссылка сейчас не работает :(
dKen
Рабочая ссылка для doc: docs.djangoproject.com/en/1.11/ref/models/querysets/#gt
Гаурав Пандей

Ответы:

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 или присоединение к полю не разрешено.
Аравинд Р Пиллаи