Django 模型表单集
Django 中的 ModelFormsets 是一种处理使用模型创建的多个表单并使用它们创建模型实例的高级方法。换句话说,ModelFormsets 是 Django 中的一组表单。一个人可能想在一个页面上初始化多个表单,所有这些都可能涉及多个 POST 请求,例如
class GeeksModel(models.Model):
title = models.CharField(max_length = 200)
description = models.TextField()
现在如果想为这个模型创建一个modelformset,就需要使用modelformset_factory。表单集是用于在同一页面上处理多个表单的抽象层。最好将其与数据网格进行比较。
from django.forms import formset_factory
GeeksFormSet = modelformset_factory(GeeksModel)
创建和使用 Django ModelFormsets
使用示例手动渲染 Django ModelFormsets的插图。考虑一个名为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 ?
在您的 geeks 应用程序中创建一个名为 models.py 的新文件,您将在其中制作所有模型。要创建 Django 模型,您需要使用 Django 模型。让我们演示一下,
在你的models.py
输入以下内容,
# import the standard Django Model
# from built-in library
from django.db import models
# declare a new model with a name "GeeksModel"
class GeeksModel(models.Model):
# fields of the model
title = models.CharField(max_length = 200)
description = models.TextField()
# renames the instances of the model
# with their title name
def __str__(self):
return self.title
让我们解释一下到底发生了什么,左侧表示字段的名称,在它的右侧,您相应地定义了输入字段的各种功能。字段的语法表示为
句法 :
Field_name = models.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 = modelformset_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/。
我们的modelformset
正在完全工作。让我们学习如何修改此表单集以使用此表单集的额外功能。
如何使用 Django ModelFormsets 创建多个表单
Django 表单集用于处理表单的多个实例。使用 Django Formsets 的extra
属性可以轻松创建多个表单。在geeks/views.py中,
from django.shortcuts import render
# relative import of forms
from .models import GeeksModel
# importing formset_factory
from django.forms import modelformset_factory
def modelformset_view(request):
context ={}
# creating a formset and 5 instances of GeeksForm
GeeksFormSet = modelformset_factory(GeeksModel, fields =['title', 'description'], extra = 3)
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/ 在表单集中输入数据
点击提交,数据将保存在服务器运行的 GeeksModel 中。现在可以以任何方式方便地使用这些数据。
在评论中写代码?请使用 ide.geeksforgeeks.org,生成链接并在此处分享链接。