初始表单数据 – Django表单
创建Django表单后,如果需要在表单的某些或所有字段中填入一些初始数据,可以使用Django表单的功能来完成。这与占位符不一样,但这些数据在提交时将被传递到视图中。有多种方法可以做到这一点,最常见的是当我们在Django视图中初始化表单时传递数据字典。其他的方法包括通过表单字段传递初始值或重写init方法。
如何向Django表单传递初始数据
用一个例子来说明传递初始数据的情况。考虑一个名为geeksforgeeks的项目,有一个名为geeks的应用程序。
现在让我们在 “geeks/forms.py “中创建一个演示表单。
from django import forms
// creating a django form
class GeeksForm(forms.Form):
title = forms.CharField()
description = forms.CharField()
available = forms.BooleanField()
email = forms.EmailField()
现在,为了渲染这个表单,我们需要创建视图和模板,用来向用户显示这个表单。在geeks/views.py中,创建一个视图
from django.shortcuts import render
from .forms import GeeksForm
# creating a home view
def home_view(request):
context = {}
form = GeeksForm(request.POST or None)
context['form'] = form
return render(request, "home.html", context)
和templates/home.html中。
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit">
</form>
现在让我们通过运行以下程序来显示这个表单
Python manage.py runserver
visit http://127.0.0.1:8000/
方法1 – 在views.py中添加初始表单数据
这种通过字典添加初始数据的方法,首先也是最常用的,是在view.py中,在表单的初始化过程中。下面是views.py的代码,添加了一些数据。
from django.shortcuts import render
from .forms import GeeksForm
def home_view(request):
context ={}
# dictionary for initial data with
# field names as keys
initial_dict = {
"title" : "My New Title",
"description" : " A New Description",
"available":True,
"email":"abc@gmail.com"
}
# add the dictionary during initialization
form = GeeksForm(request.POST or None, initial = initial_dict)
context['form']= form
return render(request, "home.html", context)
现在打开http://127.0.0.1:8000/ 。该方法是所有方法中的高级方法,将覆盖其他方法中提供的任何数据。
方法2 – 使用forms.py中的字段添加初始表单数据
人们可以在forms.py中使用字段添加初始数据。这里有一个属性initial就是为了这个目的。
In forms.py,
from django import forms
class GeeksForm(forms.Form):
# adding initial data using initial attribute
title = forms.CharField(initial = "Method 2 ")
description = forms.CharField(initial = "Method 2 description")
available = forms.BooleanField(initial = True)
email = forms.EmailField(initial = "abc@gmail.com")
现在访问,http://127.0.0.1:8000/ 。人们可以看到数据被更新到方法2。
这种方式可以将初始数据添加到表单中,以减轻用户的工作或任何相关目的。这些数据将被传递给用户定义的模型或视图,并将作为用户在表单中输入的正常数据。