Групповое изменение статуса товаров

Если нужен одинаковый статус всем товарам и не требуется логика save/сигналов, используйте Product.objects.update(status='new'). Это один UPDATE вместо чтения объектов и отдельного UPDATE для каждого.

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

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

Если нужен одинаковый статус всем товарам и не требуется логика save/сигналов, используйте Product.objects.update(status='new'). Это один UPDATE вместо чтения объектов и отдельного UPDATE для каждого.

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

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

Условие

Необходимо убедиться, что логика массового обновления статуса реализована корректно и не вызывает проблем с производительностью или избыточных запросов к базе данных.

products = Product.objects.all()

for product in products:
    product.status = "new"
    product.save()

Ответ

Если нужен одинаковый статус всем товарам и не требуется логика save/сигналов, используйте Product.objects.update(status='new'). Это один UPDATE вместо чтения объектов и отдельного UPDATE для каждого.

Исходный вариант обычно выполняет один SELECT и N сохранений, загружая все объекты в память. Массовое обновление:

updated = Product.objects.update(status='new')

При необходимости сначала ограничьте queryset фильтром. update не вызывает model.save(), pre_save/post_save и не обновляет автоматически поля, меняемые только логикой save. Если эти действия обязательны, оставьте контролируемую пакетную обработку. Большой UPDATE способен надолго удерживать блокировки, поэтому объём и режим выполнения на рабочей БД нужно учитывать отдельно.

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

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

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

Подробнее