Django 表单集
Django 中的表单集是一种在单个网页上处理多个表单的高级方法。换句话说,Formsets 是 Django 中的一组表单。一个人可能想在一个页面上初始化多个表单,所有这些都可能涉及多个 POST 请求,例如
from django import forms
class GeeksForm(forms.Form):
title = forms.CharField()
pub_date = forms.DateField()
现在可能希望允许用户一次创建文章,因此如果以传统方式考虑,则使用多个表单和每个表单的不同名称来处理单个页面上的数据,但这会使代码和功能复杂化。表单集是用于在同一页面上处理多个表单的抽象层。最好将其与数据网格进行比较。
现在创建这个GeeksForm的表单集,
from django.forms import formset_factory
GeeksFormSet = formset_factory(GeeksForm)
创建和使用 Django 表单集
使用示例手动呈现 Django 表单的插图。考虑一个名为geeks
的项目,它有一个名为geeksforgeeks
的应用程序。
Refer to the following articles to check how to create a project and an app in Django.
- How to Create a Basic Project using MVT in Django?
- How to Create an App in Django ?
在您的极客应用程序中创建一个名为 forms.py 的新文件,您将在其中制作所有表单。要创建 Django 表单,您需要使用 Django Form Class。让我们演示一下,
在你的forms.py
输入以下内容,
from django import forms
# create a form
class GeeksForm(forms.Form):
title = forms.CharField()
description = forms.CharField()
让我们解释一下到底发生了什么,左侧表示字段的名称,在它的右侧,您相应地定义了输入字段的各种功能。字段的语法表示为
句法 :
Field_name = forms.FieldType(attributes)
现在要创建一个简单的表单集,移动到views.py并创建一个formset_view
,如下所示。
from django.shortcuts import render
# relative import of forms
from .forms import GeeksForm
# importing formset_factory
from django.forms import formset_factory
def formset_view(request):
context ={}
# creating a formset
GeeksFormSet = formset_factory(GeeksForm)
formset = GeeksFormSet()
# Add the formset to context dictionary
context['formset']= formset
return render(request, "home.html", context)
要通过 HTML 呈现表单集,请创建一个 html 文件“home.html”。现在让我们编辑templates > home.html
一切准备就绪,检查我们的表单集是否正常工作,让我们访问 http://localhost:8000/。
.
我们的表单集完全正常工作。让我们学习如何修改此表单集以使用此表单集的额外功能。
如何使用 Django Formsets 创建多个表单
Django 表单集用于处理表单的多个实例。使用 Django Formsets 的extra
属性可以轻松创建多个表单。在geeks/views.py中,
from django.shortcuts import render
# relative import of forms
from .forms import GeeksForm
# importing formset_factory
from django.forms import formset_factory
def formset_view(request):
context ={}
# creating a formset and 5 instances of GeeksForm
GeeksFormSet = formset_factory(GeeksForm, extra = 5)
formset = GeeksFormSet()
# Add the formset to context dictionary
context['formset']= formset
return render(request, "home.html", context)
关键字参数extra
制作相同形式的多个副本。如果要创建 5 个表格,请输入extra = 5
,其他表格也类似。访问 http://localhost:8000/ 检查是否创建了 5 个表单。
使用 Django Formsets 处理多个表单
创建表单比在后端处理输入到这些字段中的数据要容易得多。让我们尝试演示如何在视图中轻松使用表单集的数据。在尝试处理表单集时,Django 表单集需要一个额外的参数{{ formset.management_data }} 。要了解有关管理数据的更多信息,请访问了解 ManagementForm。
在templates/home.html
中,
现在检查如何以及什么类型的数据正在呈现编辑formset_view以打印数据。在geeks/view.py
中,
from django.shortcuts import render
# relative import of forms
from .forms import GeeksForm
# importing formset_factory
from django.forms import formset_factory
def formset_view(request):
context ={}
# creating a formset and 5 instances of GeeksForm
GeeksFormSet = formset_factory(GeeksForm, extra = 3)
formset = GeeksFormSet(request.POST or None)
# print formset data if it is valid
if formset.is_valid():
for form in formset:
print(form.cleaned_data)
# Add the formset to context dictionary
context['formset']= formset
return render(request, "home.html", context)
现在让我们尝试通过 http://localhost:8000/ 在表单集中输入数据
点击提交,数据将显示在服务器运行的命令行中。现在可以以任何方式方便地使用这些数据。
Formset 是先进的东西,可用于解决许多问题,但应与正确的语法和字段验证一起使用,否则冲突和错误将破坏正常功能。要了解有关 Formsets 的更多信息,请访问 Formsets 的官方文档。
在评论中写代码?请使用 ide.geeksforgeeks.org,生成链接并在此处分享链接。