Я пытаюсь заставить встроенный набор форм работать для отображения дочерних полей класса, которые я могу редактировать в форме. Я следил за Работа с вложенными формами , но есть некоторый аспект, который я не понимаю, так как встроенный рендер форм-набора создает флажки удаления, но не элемент select. Я использовал ManyToManyField без параметра through
, но, похоже, мне нужно явно определить NotebookTag
и использовать параметр through
для создания встроенного набора форм.
models.py
class Tag(models.Model):
name = models.CharField(max_length=63)
class Notebook(models.Model):
title = models.CharField(max_length=200)
tags = models.ManyToManyField(Tag, through='NotebookTag')
class NotebookTag(models.Model):
notebook = models.ForeignKey(Notebook, on_delete=models.PROTECT)
tag = models.ForeignKey(Tag, on_delete=models.PROTECT)
views.py
from .models import Notebook, Tag, NotebookTag
from django.forms.models import inlineformset_factory
TagFormset = inlineformset_factory(Tag, Notebook.tags.through, fields=('tag',))
class NotebookUpdateView(UpdateView):
model = Notebook
template_name = 'notebook_edit.html'
fields = '__all__'
def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
context = super().get_context_data(**kwargs)
if self.request.POST:
context["children"] = TagFormset(self.request.POST)
else:
context["children"] = TagFormset()
return context
По сути, я хочу иметь возможность редактировать или добавлять новые теги для связи с ноутбуком