Django内联表单集用于ManyToMany字段

时间:2020-02-25 01:00:37

标签: django django-forms django-views

我正在尝试使用一个内联表单集来显示我可以在表单中编辑的子类字段。我一直在关注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

基本上,我希望能够编辑或添加新标签以与笔记本相关联

0 个答案:

没有答案
相关问题