Создание книги и её обложек

Переменная objs сейчас не используется. Либо удалите её, сохранив цикл внутри транзакции, либо заполните экземплярами BookCover и вызовите bulk_create. Входные данные лучше не изменять через pop.

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

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

Переменная objs сейчас не используется. Либо удалите её, сохранив цикл внутри транзакции, либо заполните экземплярами BookCover и вызовите bulk_create. Входные данные лучше не изменять через pop.

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

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

Условие

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

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

Ответ

Переменная objs сейчас не используется. Либо удалите её, сохранив цикл внутри транзакции, либо заполните экземплярами BookCover и вызовите bulk_create. Входные данные лучше не изменять через pop.

Вариант пакетного создания после валидации:

from django.db import transaction

def create_book(validate_data):
    fields = dict(validate_data)
    covers = fields.pop('covers', [])
    with transaction.atomic():
        book = Book.objects.create(**fields)
        BookCover.objects.bulk_create([
            BookCover(book=book, **cover) for cover in covers
        ])
    return book

В cover запретите book/book_id. bulk_create не вызывает обычные save и сигналы, поэтому подходит не всегда; для большого списка задают batch_size. Транзакция откатывает изменения БД, но не загрузки файлов во внешнее хранилище.

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

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

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

Подробнее