Нужны транзакция, копия входного словаря и возвращаемый book. Переменная objs сейчас не используется, а обложки создаются отдельными запросами.
Проверка метода создания книги с привязанными обложками
Нужны транзакция, копия входного словаря и возвращаемый book. Переменная objs сейчас не используется, а обложки создаются отдельными запросами.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо убедиться в корректности функции create_book. Она принимает словарь validate_data, из которого извлекает список обложек, затем создаёт запись модели Book, после чего для каждой обложки формирует связанную запись BookCover, указывая идентификатор только что созданной книги.
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_id=book.id)
Ответ
Нужны транзакция, копия входного словаря и возвращаемый book. Переменная objs сейчас не используется, а обложки создаются отдельными запросами.
from django.db import transaction
@transaction.atomic
def create_book(validate_data):
payload = dict(validate_data)
covers = payload.pop('covers', [])
book = Book.objects.create(**payload)
for cover in covers:
BookCover.objects.create(**cover, book_id=book.pk)
return book
Это вариант, сохраняющий вызовы save/сигналов для отдельных обложек. Если они не нужны, подготовьте объекты и используйте bulk_create. Входные поля должны быть заранее проверены, включая запрет подмены book_id внутри cover. При ошибке транзакция откатит книгу и все добавленные обложки. Наличие имени validate_data само по себе не доказывает, что валидация выполнена.