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中操作文件之read()方法的使用教程
May 24 Python
python 网络爬虫初级实现代码
Feb 27 Python
Django Highcharts制作图表
Aug 27 Python
简单谈谈Python中的几种常见的数据类型
Feb 10 Python
Tensorflow 查看变量的值方法
Jun 14 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
python判断计算机是否有网络连接的实例
Dec 15 Python
教你一步步利用python实现贪吃蛇游戏
Jun 27 Python
基于python实现语音录入识别代码实例
Jan 17 Python
python 解决mysql where in 对列表(list,,array)问题
Jun 06 Python
python 爬取B站原视频的实例代码
Sep 09 Python
如何在C++中调用Python
May 21 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 number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
RSA实现JS前端加密与PHP后端解密功能示例
2019/08/05 PHP
jQuery插件 tabBox实现代码
2010/02/09 Javascript
javascript深入理解js闭包
2010/07/03 Javascript
JavaScript实现网页图片等比例缩放实现代码及调用方式
2013/02/25 Javascript
jQuery数据缓存功能的实现思路及简单模拟
2013/05/27 Javascript
多个datatable共存造成多个表格的checkbox都被选中
2013/07/11 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
jquery实现搜索框常见效果的方法
2015/01/22 Javascript
jQuery简单获取键盘事件的方法
2016/01/22 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
2018/07/02 Javascript
为vue项目自动设置请求状态的配置方法
2019/06/09 Javascript
如何在JS文件中获取Vue组件
2020/09/16 Javascript
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
python re模块的高级用法详解
2018/06/06 Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
2019/04/29 Python
python学生信息管理系统实现代码
2019/12/17 Python
Python Print实现在输出中插入变量的例子
2019/12/25 Python
Tensorflow限制CPU个数实例
2020/02/06 Python
python用Tkinter做自己的中文代码编辑器
2020/09/07 Python
详解Python Celery和RabbitMQ实战教程
2021/01/20 Python
匡威意大利官方商店 :Converse意大利
2018/11/27 全球购物
State Cashmere官网:半零售价可持续蒙古羊绒
2020/02/26 全球购物
澳大利亚领先的内衣店:Bendon Lingerie澳大利亚
2020/05/15 全球购物
法务专员岗位职责
2014/01/02 职场文书
《金孔雀轻轻跳》教学反思
2014/04/20 职场文书
公司董事长岗位职责
2014/06/08 职场文书
品质口号大全
2014/06/17 职场文书
个人批评与自我批评发言稿
2014/09/28 职场文书
学校运动会加油词
2015/07/18 职场文书
课题研究阶段性总结
2015/08/13 职场文书
基于Redis的List实现特价商品列表功能
2021/08/30 Redis
Spring Bean是如何初始化的详解
2022/03/22 Java/Android
在SQL Server中使用 Try Catch 处理异常的示例详解
2022/07/15 SQL Server