在视图中使用模型表单
在视图中,可以用request.POST作为参数来创建模型表单对象,再通过模型表单对象将数据添加到数据库或者修改现有记录。
视图在使用POST方法请求时,视图通过request.POST获得客户端提交的数据。
将request.POST作为参数初始化表单,执行表单验证操作,可检查数据是否有效。
在数据有效时,用客户端提交的姓名作为条件执行查询。
当数据库中不存在相同姓名时,执行表单保存操作,将数据写入数据库。
在浏览器中访问视图URL时,请求方法为GET,此时视图返回空白表单。
举例:E:\HDCZU_Test\chapter7\app\views.py文件
from django.forms import ModelForm
from app.models import person
class personForm(ModelForm):
class Meta:
model=person #指定模型
fields="__all__" #指定字段,即这里指定所有字段
def usepersonForm(request):
if request.method=="POST": #判断提交表单采用的是POST方法,才处理数据
ms=personForm(request.POST) #用提交的数据创建表单对象
if ms.is_valid(): #校验表单数据是否成功
p=person.objects.filter(name=request.POST['name']) #校验成功后才用表单提交的name查询数据库表person
if p.count()==0: #如果查询行数为0,说明是新数据
ms.save() #调用表单的save()方法保存至数据库
msg="数据已保存"
else:
msg="数据已存在,请勿重复提交"
else:
msg="表单有误"
else:
ms=personForm() #如果未提交数据,则创建一个空白表单
msg="请提交数据"
return render(request,"tempmodelform.html",{"mform":ms,"msg":msg})
举例:E:\HDCZU_Test\chapter7\app\models.py文件
from django.db import models
class person(models.Model):
name=models.CharField(max_length=50)
age=models.SmallIntegerField()
举例:E:\HDCZU_Test\chapter7\chapter7\urls.py文件
from django.contrib import admin
from django.urls import path
from app import views
urlpatterns = [
path('admin/', admin.site.urls),
path('modelform/',views.usepersonForm),
]
举例:E:\HDCZU_Test\chapter7\app\templates\tempmodelform.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/modelform/" method="POST">
{% csrf_token %}
<table>
{{mform}}
</table>
<input type="submit" value="提交"/>
</form>
<hr>
{{msg}}
</body>
</html>
第一次进入未填参数提示请提交数据.png
提交重复数据提示数据已存在.png
提交新数据提示数据已保存.png
网友评论