Лукап in

Лукап in применяется в запросах к базе данных для фильтрации объектов, у которых значение поля содержится в переданном списке или подзапросе. Он преобразуется в SQL-оператор IN. Основное преимущество in - возможность проверять множество значений за один запрос вместо множества отдельных сравнений.

Синтаксис

pythonModel.objects.filter(field__in=[value1, value2, ...])

Пример

Давайте выберем статьи с определенными идентификаторами:

pythonfrom myapp.models import Article

articles = Article.objects.filter(id__in=[1, 3, 5])
for article in articles:
  print(article.title)

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

python"First article"
"Third article"
"Fifth article"

Пример

Давайте отфильтруем статьи по категориям, передав список названий:

pythonfrom myapp.models import Article

categories = ['Tech', 'Science', 'Health']
articles = Article.objects.filter(category__name__in=categories)
for article in articles:
  print(article.title)

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

python"AI in Medicine"
"Quantum Computing"
"Space Exploration"

Пример

Давайте используем подзапрос для динамического формирования списка значений:

pythonfrom myapp.models import Article, User

active_users = User.objects.filter(is_active=True).values_list('id', flat=True)
articles = Article.objects.filter(author_id__in=active_users)
for article in articles:
  print(article.title)

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

python"Mastering Django"
"Advanced ORM"
"REST API Design"

Пример

Давайте проверим, как работает in с пустым списком:

pythonfrom myapp.models import Article

empty_list = []
articles = Article.objects.filter(id__in=empty_list)
print(articles.count())

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

python"0"

При передаче пустого списка запрос вернет пустой QuerySet, что ожидаемо, так как ни одно значение не может принадлежать пустому множеству.

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

  • метод exact,
    который выполняет точное сравнение значения поля
  • метод gt,
    который находит значения больше указанного
  • метод range,
    который проверяет попадание значения в диапазон
  • метод contains,
    который выполняет поиск по подстроке