Django 一个字段和多个 Formset



在 Django 中,我想创建一个涉及 2 个Models的表单 - 一个Library模型和一个Book模型。Library可以包含多个Book

class Library(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
for_library = models.ForeignKey(Library, null=False, on_delete=models.PROTECT)
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)

现在,我已经创建了一个带有id=1Library,现在想要创建一个表单来将本书标记为图书馆。如何创建表单,使字段如下所示(包括预填写库 ID(:

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)

但是无法继续,也不确定是否将其与views.py集成.对此有任何帮助吗?

基本上,你的views.py中应该有这样的东西:

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()
# ...

forms.py

from .models import Library, Book
BookFormset = inlineformset_factory(Library, Book,
fields=['title', 'author'], extra=2, min_num=1, max_num=20, 
can_delete=True)

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

模板

<form method="post"> {% csrf_token %}
{{ formset }}
</form>

如果您想更好地控制表单在模板中的显示方式,请查看文档。

最新更新