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的Django框架中if标签的相关使用
Jul 15 Python
python中PIL安装简单教程
Apr 21 Python
单利模式及python实现方式详解
Mar 20 Python
python 将字符串转换成字典dict的各种方式总结
Mar 23 Python
django项目用higcharts统计最近七天文章点击量
Aug 17 Python
keras的三种模型实现与区别说明
Jul 03 Python
如何创建一个Flask项目并进行简单配置
Nov 18 Python
AI:如何训练机器学习的模型
Apr 16 Python
使用Python脚本对GiteePages进行一键部署的使用说明
May 27 Python
基于PyTorch实现一个简单的CNN图像分类器
May 29 Python
Python pandas之求和运算和非空值个数统计
Aug 07 Python
python 安全地删除列表元素的方法
Mar 16 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
无线电波是什么?它是怎样传输的?
2021/03/01 无线电
php对数组排序的简单实例
2013/12/25 PHP
php表单提交实例讲解
2015/11/12 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
2018/12/20 PHP
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
基于pthread_create,readlink,getpid等函数的学习与总结
2013/07/17 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
2017/03/02 Javascript
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
微信小程序使用字体图标的方法
2019/05/23 Javascript
Node.js 的 GC 机制详解
2019/06/03 Javascript
微信小程序swiper实现文字纵向轮播提示效果
2020/01/21 Javascript
python使用在线API查询IP对应的地理位置信息实例
2014/06/01 Python
Python实现的ini文件操作类分享
2014/11/20 Python
python 查找文件名包含指定字符串的方法
2018/06/05 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
Python生成rsa密钥对操作示例
2019/04/26 Python
MoviePy常用剪辑类及Python视频剪辑自动化
2020/12/18 Python
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
中国专业的综合网上购物商城:京东
2016/08/02 全球购物
英国花园、DIY、电器和家居用品商店:Robert Dyas
2019/03/18 全球购物
DC Shoes澳大利亚官方网上商店:购买DC鞋子
2019/10/25 全球购物
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
如何查看在weblogic中已经发布的EJB
2012/06/01 面试题
小区门卫岗位职责范本
2014/08/24 职场文书
党在我心中演讲稿
2014/09/02 职场文书
2015届本科毕业生自我鉴定
2014/09/27 职场文书
2015最新婚礼主持词
2015/06/30 职场文书
2016年中秋节晚会领导致辞
2015/11/26 职场文书
青年教师听课心得体会
2016/01/15 职场文书
九年级英语教学反思
2016/02/15 职场文书
HTML5中 rem适配方案与 viewport 适配问题详解
2021/04/27 HTML / CSS
纯html+css实现Element loading效果
2021/08/02 HTML / CSS
nginx代理实现静态资源访问的示例代码
2022/07/07 Servers