Лукап range
Лукап range применяется в методах фильтрации filter и exclude для выборки записей, значения которых находятся в указанном диапазоне. Диапазон задается кортежем или списком из двух элементов: начальное и конечное значение. Лукап работает с любыми полями, поддерживающими сравнение - числовыми, датами, строками. Важно отметить, что границы диапазона включаются в выборку (поведение аналогично оператору BETWEEN в SQL).
Синтаксис
Model.objects.filter(field__range=(start_value, end_value))
Пример
Рассмотрим модель статьи с полем 'rating' - рейтинг статьи. Отфильтруем статьи с рейтингом от 3 до 5 включительно:
from myapp.models import Article
articles = Article.objects.filter(rating__range=(3, 5))
for article in articles:
print(article.title, article.rating)
Результат выполнения кода:
"New article" 3
"Popular article" 4
"Top article" 5
Пример
Используем лукап range для фильтрации по дате. Выберем статьи, опубликованные в первой половине 2025 года (с января по июнь):
from myapp.models import Article
from datetime import date
start_date = date(2025, 1, 1)
end_date = date(2025, 6, 30)
articles = Article.objects.filter(pub_date__range=(start_date, end_date))
for article in articles:
print(article.title, article.pub_date)
Результат выполнения кода:
"Winter sale" 2025-01-15
"Spring collection" 2025-04-10
"Summer release" 2025-06-01
Пример
Лукап range можно использовать и для строк. Например, отфильтруем пользователей по диапазону имен (лексикографическое сравнение):
from myapp.models import User
users = User.objects.filter(name__range=("A", "M"))
for user in users:
print(user.name)
Результат выполнения кода:
"Alice"
"Igor"
"John"