Django использование встроенного набора форм для поля ManyToMany - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь заставить встроенный набор форм работать для отображения дочерних полей класса, которые я могу редактировать в форме. Я следил за Работа с вложенными формами , но есть некоторый аспект, который я не понимаю, так как встроенный рендер форм-набора создает флажки удаления, но не элемент 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

По сути, я хочу иметь возможность редактировать или добавлять новые теги для связи с ноутбуком

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...