Django表单集用法和示例指南

2021年3月14日14:40:51 发表评论 838 次浏览

Django中的表单集是一种在单个网页上处理多个表单的高级方法。换句话说, Formsets是Django中的一组表单。例如, 可能要在一个页面上初始化多个表单, 而所有表单可能都涉及多个POST请求。

from django import forms
class GeeksForm(forms.Form):
    title = forms.CharField()
    pub_date = forms.DateField()

现在, 人们可能希望允许用户立即创建文章, 因此, 如果以常规方式考虑, 则可以使用多种形式并为每种形式使用不同的名称来处理单个页面上的数据, 但这会使代码和功能复杂化。表单集是抽象层, 可用于同一页面上的多个表单。与数据网格相比, 它可能是最好的选择。

现在创建一个表单集

怪胎形式

,

from django.forms import formset_factory
GeeksFormSet = formset_factory(GeeksForm)

创建和使用Django Formsets

的插图手动渲染Django表单用一个例子。考虑一个名为极客有一个名为极客.

请参阅以下文章, 以检查如何在Django中创建项目和应用。如何在Django中使用MVT创建基本项目?如何在Django中创建应用程序?

在你的怪胎应用程序中, 创建一个名为forms.py的新文件, 将在其中创建所有表单。要创建Django表单, 你需要使用

Django表单类

。让我们来演示如何

在你的

表格

输入以下内容

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"。现在让我们编辑模板> home.html

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

全部检查我们的表单集是否正常运行

http://本地主机:8000 /

.

django-formsets

.

我们的表单正在完全运行。让我们学习如何修改此表单集以使用此表单集的其他功能。

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

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

关键字参数

额外

制作相同形式的多个副本。如果要创建5个表单, 请输入

额外= 5

对于其他人也是如此。访问

http://本地主机:8000 /

检查是否创建了5个表单。

django-formsets-多种形式

使用Django Formsets处理多个表单

创建表单比处理在后端输入到这些字段中的数据要容易得多。让我们尝试演示如何轻松地在视图中使用表单集的数据。尝试处理表单集时, Django表单集需要一个额外的参数

{{formset.management_data}}

。要了解有关管理数据的更多信息, 请访问

了解管理表格

.

In

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 >

现在检查渲染方式和数据类型formset_view打印数据。在极客/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://本地主机:8000 /

输入表单数据django表单集

点击提交, 数据将显示在运行服务器的命令行中。现在可以方便地以任何方式使用此数据。

django-formsets-use-data1

Formset是高级工具, 可用于解决许多问题, 但应与正确的语法和字段验证配合使用, 否则冲突和错误将破坏正常功能。要了解有关表单集的更多信息, 请访问

表单的官方文档

.

注意怪胎!巩固你的基础Python编程基础课程和学习基础知识。

首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。


木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: