Лукап range

Лукап range применяется в методах фильтрации filter и exclude для выборки записей, значения которых находятся в указанном диапазоне. Диапазон задается кортежем или списком из двух элементов: начальное и конечное значение. Лукап работает с любыми полями, поддерживающими сравнение - числовыми, датами, строками. Важно отметить, что границы диапазона включаются в выборку (поведение аналогично оператору BETWEEN в SQL).

Синтаксис

pythonModel.objects.filter(field__range=(start_value, end_value))

Пример

Рассмотрим модель статьи с полем 'rating' - рейтинг статьи. Отфильтруем статьи с рейтингом от 3 до 5 включительно:

pythonfrom myapp.models import Article

articles = Article.objects.filter(rating__range=(3, 5))
for article in articles:
  print(article.title, article.rating)

Результат выполнения кода:

python"New article" 3
"Popular article" 4
"Top article" 5

Пример

Используем лукап range для фильтрации по дате. Выберем статьи, опубликованные в первой половине 2025 года (с января по июнь):

pythonfrom 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)

Результат выполнения кода:

python"Winter sale" 2025-01-15
"Spring collection" 2025-04-10
"Summer release" 2025-06-01

Пример

Лукап range можно использовать и для строк. Например, отфильтруем пользователей по диапазону имен (лексикографическое сравнение):

pythonfrom myapp.models import User

users = User.objects.filter(name__range=("A", "M"))
for user in users:
  print(user.name)

Результат выполнения кода:

python"Alice"
"Igor"
"John"

Смотрите также

  • лукап gt,
    который выбирает записи со значениями больше указанного
  • лукап gte,
    который выбирает записи со значениями больше или равными указанному
  • лукап lt,
    который выбирает записи со значениями меньше указанного
  • лукап lte,
    который выбирает записи со значениями меньше или равными указанному