Это в основном длинная версия комментария @renatopp
Это приводит к дублированию ошибки! Почему это так?
Вы создаете новую книгу / бумагу, похожую на ту, что у вас есть в БД. Я так понимаю, вы установили бумагу / книгу name
с уникальным ограничением
Должен ли я сначала запросить бумагу («Иллюминаты»)?
Посмотрим, что вы сказали раньше
Давайте добавим нового автора, и давайте предположим, что Дэн помогал в написании иллюминатов.
Этот новый автор помогает Дэну написать Иллюминаты . Те же иллюминаты, которые уже есть на БД. Ваш код там означает «Брауни пишет новую книгу с таким же названием, как у Дэна». Итак, есть две книги, следовательно, ошибка дублирования.
Если вы хотите, чтобы «Брауни помогал Дэну», вы должны заставить его написать ту же самую книгу. Возьмите Иллюминатов Дэна из БД и скажите Брауни, чтобы они помогли Дэну.
# illuminati = Dan's book from db
author_2.books.append(illuminati)
Я меняю код там. Поправьте меня, если я ошибаюсь, я думаю, что вы имели в виду добавить книгу к Брауни, а не удалять все его книги и потом дать ему книгу (author_2.books = [Paper('Illuminati')]
)
Что если бы у меня был целый список книг? Должен ли я запросить каждый из них?
Это зависит. Это все новые книги? Или существующие книги? Может быть, только некоторые из них новые? Или ты вообще не знаешь?
Вам придется проверить их или попробовать поймать исключение