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中使用zlib模块进行数据压缩的教程
Jun 26 Python
详解python里使用正则表达式的分组命名方式
Oct 24 Python
Python之Scrapy爬虫框架安装及简单使用详解
Dec 22 Python
Python使用Django实现博客系统完整版
Sep 29 Python
在Python中实现shuffle给列表洗牌
Nov 08 Python
python实现连连看辅助(图像识别)
Mar 25 Python
django如何实现视图重定向
Jul 24 Python
python 计算积分图和haar特征的实例代码
Nov 20 Python
Python正则表达式学习小例子
Mar 03 Python
Python使用plt.boxplot() 参数绘制箱线图
Jun 04 Python
Python3 webservice接口测试代码详解
Jun 23 Python
Python函数中的不定长参数相关知识总结
Jun 24 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
截获网站title标签之家内容的例子
2006/10/09 PHP
PHP提取中文首字母
2008/04/09 PHP
PHP 反射(Reflection)使用实例
2015/05/12 PHP
深入浅出php socket编程
2015/05/13 PHP
php简单构造json多维数组的方法示例
2017/06/08 PHP
jQuery中使用了document和window哪些属性和方法小结
2011/09/13 Javascript
你需要知道的10个最佳javascript开发实践小结
2012/04/15 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
原生JS绑定滑轮滚动事件兼容常见浏览器
2014/06/30 Javascript
Javascript数组与字典用法分析
2014/12/13 Javascript
JavaScript不使用prototype和new实现继承机制
2014/12/29 Javascript
js实现非常简单的焦点图切换特效实例
2015/05/07 Javascript
js遍历map javaScript遍历map的简单实现
2016/08/26 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
Node批量爬取头条视频并保存方法
2018/09/20 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
React实现评论的添加和删除
2020/10/20 Javascript
[50:11]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第三场
2018/04/09 DOTA
python数据处理实战(必看篇)
2017/06/11 Python
Python操作MySQL模拟银行转账
2018/03/12 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
2018/05/25 Python
Django之模型层多表操作的实现
2019/01/08 Python
python selenium爬取斗鱼所有直播房间信息过程详解
2019/08/09 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
Python基于BeautifulSoup爬取京东商品信息
2020/06/01 Python
Python sklearn中的.fit与.predict的用法说明
2020/06/28 Python
eDreams巴西:廉价机票,酒店优惠和度假套餐
2017/04/14 全球购物
Servlet的生命周期
2013/08/25 面试题
个人求职简历的自我评价
2013/10/19 职场文书
大型活动策划方案
2014/01/12 职场文书
诚信承诺书范文
2014/03/27 职场文书
男方婚前保证书
2015/02/28 职场文书
校本研修个人总结
2015/02/28 职场文书
酒店财务总监岗位职责
2015/04/03 职场文书
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技