Django在视图中使用模型表单

2020-11-04  本文已影响0人  Chaweys

在视图中使用模型表单
在视图中,可以用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
上一篇下一篇

猜你喜欢

热点阅读