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批量修改文件名的实现代码
Sep 01 Python
通过mod_python配置运行在Apache上的Django框架
Jul 22 Python
python字符串,数值计算
Oct 05 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
Nov 29 Python
Python pandas RFM模型应用实例详解
Nov 20 Python
Python StringIO如何在内存中读写str
Jan 07 Python
TensorFlow内存管理bfc算法实例
Feb 03 Python
python绘制动态曲线教程
Feb 24 Python
Python爬虫实现百度翻译功能过程详解
May 29 Python
深入理解Python 多线程
Jun 16 Python
pytorch简介
Nov 11 Python
Django drf请求模块源码解析
Jun 08 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计算一年多少个星期和每周的开始和结束日期
2014/07/01 PHP
php面向对象中static静态属性和静态方法的调用
2015/02/08 PHP
THINKPHP支持YAML配置文件的设置方法
2015/03/17 PHP
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
浅谈laravel orm 中的一对多关系 hasMany
2019/10/21 PHP
JSON 学习之完全手册 图文
2007/05/29 Javascript
JS获取几种URL地址的方法小结
2014/02/26 Javascript
angularjs ocLazyLoad分步加载js文件实例
2017/01/17 Javascript
JS常见算法详解
2017/02/28 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
layui.tree组件的使用以及搜索节点功能的实现
2019/09/26 Javascript
基于ts的动态接口数据配置的详解
2019/12/18 Javascript
vue 重塑数组之修改数组指定index的值操作
2020/08/09 Javascript
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
详解supervisor使用教程
2017/11/21 Python
教你用Python写安卓游戏外挂
2018/01/11 Python
Python冲顶大会 快来答题!
2018/01/17 Python
Python实现的括号匹配判断功能示例
2018/08/25 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
2019/06/25 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
2019/08/15 Python
python生成随机红包的实例写法
2019/09/02 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
python3.6使用SMTP协议发送邮件
2020/05/20 Python
python实现斗地主分牌洗牌
2020/06/22 Python
Python gevent协程切换实现详解
2020/09/14 Python
css3使用animation属性实现炫酷效果(推荐)
2020/02/04 HTML / CSS
【HTML5】3D模型--百行代码实现旋转立体魔方实例
2016/12/16 HTML / CSS
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
英国领先的鞋类零售商和顶级品牌的官方零售商:Wynsors
2020/02/17 全球购物
网络教育毕业生自我鉴定
2013/10/10 职场文书
学前教育专业求职信
2014/09/02 职场文书
单位单身证明样本
2014/10/11 职场文书
幼儿教师2014年度工作总结
2014/12/16 职场文书
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL
MongoDB支持的数据类型
2022/04/11 MongoDB