django框架ModelForm组件用法详解


Posted in Python onDecember 11, 2019

本文实例讲述了django框架ModelForm组件用法。分享给大家供大家参考,具体如下:

ModelForm组件是django中一个非常强大的组件,其功能主要有

一 校验字段

ModelForm组件的主要格式为:

继承组件

from django import forms
class UserModelForm(forms.ModelForm):

指定表

model = models.UserInfo

指定要显示的字段

fields='__all__'  #显示所有,常用的方式

或者

exclude=['password'] #排除某个字段

或者

fields=['username','password','confirm_password','email','gender','depart'] #此表中的字段决定了页面显示的排列顺序

插件:指定属性或者设置字段类型

widgets = {
      'username': forms.TextInput(attrs={'class': 'form-control', 'placeholder': '用户名'}),
      'password': forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': '密码'}),
      'email': forms.EmailInput(attrs={'class': 'form-control', 'placeholder': '邮箱'}),
      'gender': forms.Select(attrs={'class': 'form-control'}),
      'depart': forms.Select(attrs={'class': 'form-control'}),
    }

定制错误信息

error_messages = {
      'email':{
        'required':'邮箱不能为空',
        'invalid':'邮箱格式错误',
      }
    }

设置显示的标签名称:

labels={"username":"用户名","password":"密码"}

设置钩子函数

def clean_confirm_password(self): #'clean_'加上字段名 这里先使用局部钩子

当设置了一个字段的钩子函数时,最后必须要返回这个字段

return confirm

在函数中使用

def user_add(request):
  if request.method == 'GET':
    form = UserModelForm() #最开始访问的时候是没有数据的
    return render(request, 'user_form.html', {'form':form})
  form = UserModelForm(data=request.POST) #传入数据
  if form.is_valid(): #进行校验
    print(form.cleaned_data)
    form.save()
    return redirect('/crm/user/list/')
  return render(request, 'user_form.html', {'form': form})

区分 form.cleaned_data和form. errors

1  ModelForm组件对数据进行校验的时候,对于校验不合格的数据放入 form.errors
2  那么他们到底都长什么样子呢

#print(form.cleaned_data)
{'username': 'lu5', 'password': '123', 'gender': 1, 'depart': <Department: 部门-1>}
#print(form.errors)
<ul class="errorlist"><li>confirm_password<ul class="errorlist"><li>两次密码输入不一致,请重新输入</li></ul></li><li>email<ul class="errorlist"><li>邮箱格式错误</li></ul></li></ul>

一 校验字段

下面一个例子:校验用户的信息,并且确认用户的密码

django框架ModelForm组件用法详解

需要对原有数据进行编辑时,需要加入instance参数例如:

def user_edit(request,nid):
  obj = models.UserInfo.objects.filter(id=nid).first()
  if request.method == 'GET':
    form = UserModelForm(instance=obj) #注意此处
    return render(request, 'user_form.html', {'form':form})
  form = UserModelForm(data=request.POST,instance=obj) #注意此处
  if form.is_valid():
    form.save()
    return redirect('/crm/user/list/')
  return render(request, 'user_form.html', {'form': form})

另外:

django本身就有对字段检测的功能,只不过单纯的是对空的判断,一般显示的错误信息是英文,我们要显示为中文呢,怎么处理

LANGUAGE_CODE = 'zh-hans'
# LANGUAGE_CODE = 'en-us'

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
使用python编写批量卸载手机中安装的android应用脚本
Jul 21 Python
总结用Pdb库调试Python的方式及常用的命令
Aug 18 Python
微信跳一跳小游戏python脚本
Jan 05 Python
Flask之请求钩子的实现
Dec 23 Python
深度辨析Python的eval()与exec()的方法
Mar 26 Python
Python使用Turtle库绘制一棵西兰花
Nov 23 Python
Python tkinter三种布局实例详解
Jan 06 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
Mar 30 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
Jun 18 Python
Matlab使用Plot函数实现数据动态显示方法总结
Feb 25 Python
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
Jun 11 Python
Python实现猜拳与猜数字游戏的方法详解
Apr 06 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
Dec 11 #Python
通过实例解析Python调用json模块
Dec 11 #Python
Flask中endpoint的理解(小结)
Dec 11 #Python
Python中Flask-RESTful编写API接口(小白入门)
Dec 11 #Python
Python zip函数打包元素实例解析
Dec 11 #Python
基于Python实现扑克牌面试题
Dec 11 #Python
Python如何使用argparse模块处理命令行参数
Dec 11 #Python
You might like
PHP 验证码的实现代码
2011/07/17 PHP
PHP中source #N问题的解决方法
2014/01/27 PHP
PHP入门教程之上传文件实例详解
2016/09/11 PHP
JavaScript 获得选中文本内容的方法
2009/02/15 Javascript
初识JQuery 实例一(first)
2011/03/16 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
jquery的父子兄弟节点查找示例代码
2014/03/03 Javascript
jQuery分别获取选中的复选框值的示例
2014/06/17 Javascript
Javascript遍历table中的元素示例代码
2014/07/08 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
2014/07/08 Javascript
Jquery 实现图片轮换
2015/01/28 Javascript
jQuery结合ajax实现动态加载文本内容
2015/05/19 Javascript
深入解析JavaScript的闭包机制
2015/10/20 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
2016/03/25 Javascript
最全面的百度地图JavaScript离线版开发
2016/09/10 Javascript
el表达式 写入bootstrap表格数据页面的实例代码
2017/01/11 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
bootstrap折叠调用collapse()后data-parent不生效的快速解决办法
2017/02/23 Javascript
详解Angular CLI + Electron 开发环境搭建
2017/07/20 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
JavaScript捕捉事件和阻止冒泡事件实例分析
2018/08/03 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
2019/05/26 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
理解Python垃圾回收机制
2016/02/12 Python
Python socket模块实现的udp通信功能示例
2019/04/10 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
2021/01/29 Python
CSS 3.0文字悬停跳动特效代码
2020/10/26 HTML / CSS
北京RT科技有限公司.net工程师面试题
2013/02/15 面试题
党员入党表决心的话
2014/03/11 职场文书
大跃进口号
2014/06/16 职场文书
2014年学校团委工作总结
2014/12/20 职场文书
班主任自我评价范文
2015/03/11 职场文书
中学推普周活动总结
2015/05/07 职场文书
JavaScript实现简单图片切换
2021/04/29 Javascript