博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用ModelForm表单验证
阅读量:6670 次
发布时间:2019-06-25

本文共 2147 字,大约阅读时间需要 7 分钟。

1.定义model.py

  model中定义的字段类型,只有在通过form进行验证的时候才有效,数据库中的字段类型与其并不完全一致,如数据库中并没有ipaddress类型。如果不通过form对字段进行验证,则用户可以在前端输入任何类型数据而不会出错。

from django.db import modelsclass hv(models.Model):    name=models.CharField(max_length=100,unique=True,primary_key=True)    ip=models.GenericIPAddressField()    def __str__(self):        return self.name

2.定义froms.py

ModelForm将model和前台form连接到了一起

forms.Form并未连接后端的model,只是用来对前台输入进行判断其是否合法

from django import formsfrom django.forms import ModelFormfrom aptest.models import hv,vm,test #导入需要使用的modelclass hvform(ModelForm):    class Meta:        model = hv        fields = ['name','ip']        #fields = '__all__'     #选择使用所有字段        #exclude = ['title']    #不适用某个字段
class vmform(ModelForm):    cpu=forms.CharField(max_length=5,error_messages={'required': 'Please enter your name'}) #重新对cpu字段进行格式限制,会覆盖Model中已定义的类型格式。自定义错误信息,需要知道具体错误的名称 如“requeired”这些名称可以在API 中找到         class Meta:        model = vm        fields = '__all__'

 

3.编辑views.py

def add(request):    if request.method == 'POST':        #print request.POST['hvname'],request.POST['hvip']        print request.method        form = hvform(request.POST)                if form.is_valid(): #判断输入数据是否合法            #print form            #print form.cleaned_data['name'],form.cleaned_data['ip']            fc = form.cleaned_data            print fc['name'],fc['ip']        else:            err.append(form.errors) #输出错误信息    else:        form = hvform()    context={
'hour_offset':hour_offset,'ls':ls,'err':err} return render(request,'aptest/form.html',context)

4.编辑模板form.html

   ADD   
{% csrf_token %}
{% if err %}

Please correct the error: {

{ err }} below.

{% endif %}

访问输出:

 

在模版中通过{

{form.as_table}} 方式显示form内容时,Django会自动的将外键字段转化成一个select的控件,并且通过下拉框来选择一个值,如下图:

context={
'err':err,'form':form}return render(request,'aptest/current_datetime.html',context)

 

转载地址:http://fklxo.baihongyu.com/

你可能感兴趣的文章
Android SharedPreference的使用
查看>>
C#中的线程(四)高级话题
查看>>
在android中进行视频的分割
查看>>
LINUX 内核内存管理
查看>>
Ionic学习笔记四 一些问题处理
查看>>
ViewPager 的页面重置问题
查看>>
[LINUX] 查看连接数和IO负载
查看>>
上传大文件报404错误的解决办法(转载)
查看>>
su,exit,adduser,deluser,usermod,groups
查看>>
建站指南
查看>>
jQuery-处理元素内容、表单元素
查看>>
H5调用Android拨打电话
查看>>
[Angular2 Form] Reactive Form, FormBuilder
查看>>
R语言基础:数组&列表&向量&矩阵&因子&数据框
查看>>
inference和learning
查看>>
PCB阻抗控制
查看>>
win10的安装与下载
查看>>
Win10年度更新开发必备:VS2015 Update 3正式版下载汇总
查看>>
nginx 学习笔记(9) 配置HTTPS服务器--转载
查看>>
cannot change version web module 3.0
查看>>