Django ModelFormSets

Django ModelFormSets

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的情况。考虑一个名为geeksforgeeks的项目,有一个名为geeks的应用程序。

在你的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并创建一个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 = modelformset_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 ModelFormSets

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

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

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

使用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 ModelFormSets

点击提交,数据将被保存在服务器运行的GeeksModel中。现在人们可以以任何方式方便地使用这些数据。

Django ModelFormSets

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程