Лукап in
Лукап in применяется в запросах к базе данных для фильтрации объектов, у которых значение поля содержится в переданном списке или подзапросе. Он преобразуется в SQL-оператор IN. Основное преимущество in - возможность проверять множество значений за один запрос вместо множества отдельных сравнений.
Синтаксис
Model.objects.filter(field__in=[value1, value2, ...])
Пример
Давайте выберем статьи с определенными идентификаторами:
from myapp.models import Article
articles = Article.objects.filter(id__in=[1, 3, 5])
for article in articles:
print(article.title)
Результат выполнения кода:
"First article"
"Third article"
"Fifth article"
Пример
Давайте отфильтруем статьи по категориям, передав список названий:
from myapp.models import Article
categories = ['Tech', 'Science', 'Health']
articles = Article.objects.filter(category__name__in=categories)
for article in articles:
print(article.title)
Результат выполнения кода:
"AI in Medicine"
"Quantum Computing"
"Space Exploration"
Пример
Давайте используем подзапрос для динамического формирования списка значений:
from 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)
Результат выполнения кода:
"Mastering Django"
"Advanced ORM"
"REST API Design"
Пример
Давайте проверим, как работает in с пустым списком:
from myapp.models import Article
empty_list = []
articles = Article.objects.filter(id__in=empty_list)
print(articles.count())
Результат выполнения кода:
"0"
При передаче пустого списка запрос вернет пустой QuerySet, что ожидаемо, так как ни одно значение не может принадлежать пустому множеству.