Метод in_bulk
Метод in_bulk применяется к QuerySet и позволяет эффективно извлекать записи по списку идентификаторов. В отличие от метода filter, который возвращает список объектов, in_bulk возвращает словарь, что удобно для быстрого доступа к объекту по его первичному ключу. Метод выполняет один SQL-запрос с условием IN, что делает его более производительным, чем последовательное использование метода get для каждого идентификатора.
Метод принимает следующие аргументы:
-
id_list- список или кортеж значений первичных ключей (по умолчаниюNone). Если передан пустой список, возвращается пустой словарь. Если не передан - возвращаются все объекты в виде словаря. -
field_name- имя поля, по которому производится поиск (по умолчанию'pk'). Может быть любым уникальным полем модели.
Синтаксис
Model.objects.in_bulk(id_list=None, field_name='pk')
Пример
Получим статьи по списку идентификаторов:
from myapp.models import Article
articles = Article.objects.in_bulk([1, 3, 5])
for pk, article in articles.items():
print(f"{pk}: {article.title}")
Результат выполнения кода:
"1: article_1"
"3: article_3"
"5: article_5"
Пример
Получим все объекты модели в виде словаря, где ключом будет первичный ключ:
from myapp.models import Category
categories = Category.objects.in_bulk()
for pk, category in categories.items():
print(f"{pk}: {category.name}")
Результат выполнения кода:
"1: category_1"
"2: category_2"
"3: category_3"
Пример
Используем поле с уникальным значением, отличным от первичного ключа:
from myapp.models import User
users = User.objects.in_bulk(['john_doe', 'jane_doe'], field_name='username')
for username, user in users.items():
print(f"{username}: {user.email}")
Результат выполнения кода:
"john_doe: john@example.com"
"jane_doe: jane@example.com"
Смотрите также
-
метод
get,
который получает одну запись из базы данных -
метод
filter,
который фильтрует записи вQuerySet -
метод
bulk_create,
который массово создаёт записи в базе данных -
метод
bulk_update,
который массово обновляет записи в базе данных