Метод in_bulk

Метод in_bulk применяется к QuerySet и позволяет эффективно извлекать записи по списку идентификаторов. В отличие от метода filter, который возвращает список объектов, in_bulk возвращает словарь, что удобно для быстрого доступа к объекту по его первичному ключу. Метод выполняет один SQL-запрос с условием IN, что делает его более производительным, чем последовательное использование метода get для каждого идентификатора.

Метод принимает следующие аргументы:

Синтаксис

pythonModel.objects.in_bulk(id_list=None, field_name='pk')

Пример

Получим статьи по списку идентификаторов:

pythonfrom myapp.models import Article

articles = Article.objects.in_bulk([1, 3, 5])
for pk, article in articles.items():
  print(f"{pk}: {article.title}")

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

python"1: article_1"
"3: article_3"
"5: article_5"

Пример

Получим все объекты модели в виде словаря, где ключом будет первичный ключ:

pythonfrom myapp.models import Category

categories = Category.objects.in_bulk()
for pk, category in categories.items():
  print(f"{pk}: {category.name}")

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

python"1: category_1"
"2: category_2"
"3: category_3"

Пример

Используем поле с уникальным значением, отличным от первичного ключа:

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

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

python"john_doe: john@example.com"
"jane_doe: jane@example.com"

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

  • метод get,
    который получает одну запись из базы данных
  • метод filter,
    который фильтрует записи в QuerySet
  • метод bulk_create,
    который массово создаёт записи в базе данных
  • метод bulk_update,
    который массово обновляет записи в базе данных