Django 表单集

Django 表单集

Django中的表单集是一种在单个网页上处理多个表单的高级方式。换句话说,表单集是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表单的情况。考虑一个名为geeksforgeeks的项目,它有一个名为geeks的应用程序。

在你的geeks应用程序中,创建一个名为forms.py的新文件,你将在其中制作所有的表单。要创建一个Django表单,你需要使用Django表单类。让我们来演示一下。
在你的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并创建一个formet_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”。现在让我们编辑模板 > home.html

<form method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    {{ formset.as_p }}
    <input type="submit" value="Submit">
</form>

所有的设置都是为了检查我们的表单集是否工作,让我们访问http://localhost:8000/ 。

Django Formsets
我们的表单集已经完全工作了。让我们来学习如何修改这个表单集,以使用这个表单集的额外功能。

如何使用Django表单集创建多个表单

Django表单集是用来处理一个表单的多个实例的。人们可以使用Django表单集的额外属性轻松创建多个表单。在 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表单集处理多个表单

创建一个表单比在后端处理输入这些字段的数据要容易得多。让我们试着演示一下如何在视图中轻松使用表单集的数据。当试图处理表单集时,Django表单集需要一个额外的参数 {{ formset.management_data }}。
在templates/home.html ,

<form method="POST" enctype="multipart/form-data">
      
    <!-- Management data of formset -->
    {{ formset.management_data }}
  
    <!-- Security token -->
    {% csrf_token %}
  
    <!-- Using the formset -->
    {{ formset.as_p }}
      
    <input type="submit" value="Submit">
</form>

现在要检查数据是如何被呈现的,以及什么类型的数据,编辑formet_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/,在表单组中输入数据
Django Formsets
点击提交,数据将显示在服务器运行的命令行中。人们现在可以以任何方式方便地使用这些数据。

Django Formsets
表单集是先进的东西,可以用来解决一些问题,但应该使用正确的语法和字段验证,否则冲突和错误会扰乱正常的功能。要了解更多关于表单集的信息,请访问表单集的官方文档。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程