Django一个字段和多个表单集

Django一个字段和多个表单集,django,Django,在Django中,我想创建一个包含两个模型的表单——一个库模型和一个书模型。图书馆可以容纳多本书 现在,我已经创建了一个id=1的库,现在想创建一个表单来标记库中的多本书。如何创建表单,使字段看起来像预填充库ID: Library: <id=1 Library> Book1 Title: _____ Book1 Author: _____ Book2 Title: _____ Book2 Author: _____ 但无法继续,我不确定是否将其与views.py集成。这方面有

在Django中,我想创建一个包含两个模型的表单——一个库模型和一个书模型。图书馆可以容纳多本书

现在,我已经创建了一个id=1的库,现在想创建一个表单来标记库中的多本书。如何创建表单,使字段看起来像预填充库ID:

Library: <id=1 Library>

Book1 Title:  _____
Book1 Author: _____
Book2 Title:  _____
Book2 Author: _____

但无法继续,我不确定是否将其与views.py集成。这方面有什么帮助吗?

基本上,您的视图中应该有类似的内容。py:

在forms.py中:

请记住,只要您对默认表单感到满意,就不需要在inlineformset_工厂中指定自定义表单

模板:


如果您想更多地控制表单在模板中的显示方式,请选中。

抱歉,我想在CBV设置中执行此操作,抱歉,忘记将其添加为requirement@bryanblackbee如果要使用CBV,应该使用CreateView并重写get和post方法。检查并让我知道,如果你不能使工作顺便说一句,我更喜欢与FBV的工作,因为他们在这个用例中更清楚。
Library: <id=1 Library>

Book1 Title:  _____
Book1 Author: _____
Book2 Title:  _____
Book2 Author: _____
BookFormset = inlineformset_factory(Library, Book,
    fields=['title', 'author'], form=CreateBookForm, extra=2, min_num=1, max_num=20, 
    can_delete=True)
def library_books(request, library_pk):
    if request.method == 'POST':
        library = Library.objects.get(pk=pk)
        formset = forms.BookFormset(request.POST, instance=library)
        if formset.is_valid():
            formset.save()
        # ...
from .models import Library, Book

BookFormset = inlineformset_factory(Library, Book,
    fields=['title', 'author'], extra=2, min_num=1, max_num=20, 
    can_delete=True)
<form method="post"> {% csrf_token %}
    {{ formset }}
</form>