Формирование записи книги с прикреплёнными обложками – вариант 4

Синтаксис исходной функции допустим, но она мутирует вход, не возвращает книгу и не гарантирует атомарное создание обложек. Ошибка в середине цикла оставит часть записей без внешней транзакции.

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

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

Синтаксис исходной функции допустим, но она мутирует вход, не возвращает книгу и не гарантирует атомарное создание обложек. Ошибка в середине цикла оставит часть записей без внешней транзакции.

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

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

Условие

Функция create_book отвечает за создание экземпляра модели Book и связанных с ней записей BookCover на основе переданного словаря validate_data. Сначала из словаря извлекается список данных об обложках, затем создаётся объект книги, после чего в цикле последовательно создаются объекты обложек, привязывая их к только что созданной книге. Необходимо выполнить ревью кода: проверить корректность синтаксиса, правильность передачи связанных данных, возможности оптимизации и потенциальные ошибки.

def create_book(validate_data: dict):
    covers: list[dict] = validate_data.pop('covers')
    book = Book.objects.create(**validate_data)
    for cover in covers:
        BookCover.objects.create(**cover, book_id=book.id)

Ответ

Синтаксис исходной функции допустим, но она мутирует вход, не возвращает книгу и не гарантирует атомарное создание обложек. Ошибка в середине цикла оставит часть записей без внешней транзакции.

Исправьте контракт: копия validated_data, явно обязательный или необязательный covers, валидация вложенных полей, transaction.atomic() и return book. Если cover содержит book_id, вызов с дополнительным book_id даст конфликт аргументов; поле связи должно задаваться сервером. Для множества обложек рассмотрите bulk_create, учитывая отсутствие вызова save() и сигналов. Если создание затрагивает файлы, нужна отдельная стратегия компенсации или завершения после commit.

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

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

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

Подробнее