Сохраните отношения "многие-ко-многим" после использования метода add() на поле для добавления записи
У меня есть модель Book и я хочу сохранять новую запись об этой книге после каждого обновления информации об этой книге (дублирование информации). Это работает хорошо, но я не знаю, как хранить отношения "многие-ко-многим". При этом я хочу, чтобы главная книга не сохранялась в базе данных, а только дублирующая информация в базе данных
models.py
class Book(models.Model):
slug = models.SlugField(max_length=255)
title = models.CharField(max_length=255)
author = models.ForeignKey(
"Author",
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name="author_book",
)
abstract = models.TextField()
coauthor_book = models.ManyToManyField("Author", blank=True, related_name="coauthor_book")
subject = ManyToManyField("Subject")
class Author(models.Model):
slug = models.SlugField(max_length=255)
name = models.CharField(max_length=255)
class Subject(models.Model):
slug = models.SlugField(max_length=255)
name = models.CharField(max_length=255)
forms.py
class BookForm(forms.ModelForm):
class Meta:
model = Book
fields = "__all__"
views.py
class BookUpdateView(UpdateView):
model = Book
form_class = BookForm
template_name = "book/book_update.html"
def post(self, request, *args, **kwargs):
self.object = self.get_object()
form = self.get_form()
if form.is_valid():
obj = form.save(commit=False)
obj.editor = self.request.user
coauthors = obj.coauthor_book
subjects = obj.subject
draft = Book.objects.create(
title=obj.title,
author=obj.author,
abstract=obj.abstract,
slug=obj.slug,
)
draft.save()
# My triying. But It doesn't work
for coauthor in coauthors.all():
draft.coauthor_book.add(coauthor)
for subject in subjects.all():
draft.subject.add(subject)
return redirect("book", obj.slug)
return self.render_to_response({"form": form})