我正在尝试使用一个内联表单集来显示我可以在表单中编辑的子类字段。我一直在关注Working with nested forms,但是有些方面我不理解,因为内联表单集渲染会产生删除复选框,但没有选择元素。我当时在不使用through
参数的情况下使用ManyToManyField,但似乎我需要显式定义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
基本上,我希望能够编辑或添加新标签以与笔记本相关联