Как в Django ORM работает метод `bulk_create` и какие ограничения он накладывает на автоинкрементные ключи?

bulk_create вставляет объекты пакетами без вызова обычного save() и модельных сигналов. Заполнение автоматически созданных primary key в объектах зависит от СУБД и режима обработки конфликтов.

Короткий ответ

Что ответить на собеседовании

bulk_create вставляет объекты пакетами без вызова обычного save() и модельных сигналов. Заполнение автоматически созданных primary key в объектах зависит от СУБД и режима обработки конфликтов.

Подробный разбор

Ответ с пояснениями

bulk_create вставляет объекты пакетами без вызова обычного save() и модельных сигналов. Заполнение автоматически созданных primary key в объектах зависит от СУБД и режима обработки конфликтов.

Для Django 5.2 при ignore_conflicts=False возврат AutoField поддерживается PostgreSQL, MariaDB и SQLite 3.35+; на других backend pk может остаться незаполненным. ignore_conflicts=True отключает заполнение автоматически полученных ключей. Метод не сохраняет many-to-many связи и не поддерживает дочерние модели multi-table inheritance. Не рассчитывайте на непрерывность последовательности ID: конфликты и параллельные вставки создают пропуски. Подбирайте batch_size и отдельно выполняйте необходимую валидацию и бизнес-действия, обычно спрятанные в save или signals.

Источник: docs.djangoproject.com.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее