Если нужен одинаковый статус всем товарам и не требуется логика 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 способен надолго удерживать блокировки, поэтому объём и режим выполнения на рабочей БД нужно учитывать отдельно.