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连接远程ftp服务器并列出目录下文件的方法
Apr 01 Python
Python+Opencv识别两张相似图片
Mar 23 Python
python操作mysql数据库
Mar 05 Python
python基础_文件操作实现全文或单行替换的方法
Sep 04 Python
python+pandas分析nginx日志的实例
Apr 28 Python
Flask-Mail用法实例分析
Jul 21 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
Feb 21 Python
Python smtp邮件发送模块用法教程
Jun 15 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
Nov 24 Python
Python 内存管理机制全面分析
Jan 16 Python
Ubuntu20下的Django安装的方法步骤
Jan 24 Python
关于python中readlines函数的参数hint的相关知识总结
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
php 远程图片保存到本地的函数类
2008/12/08 PHP
一步一步学习PHP(4) php 函数 补充2
2010/02/15 PHP
解析php做推送服务端实现ios消息推送
2013/07/01 PHP
ThinkPHP CURD方法之data方法详解
2014/06/18 PHP
php实现refresh刷新页面批量导入数据的方法
2014/12/23 PHP
Joomla语言翻译类Jtext用法分析
2016/05/05 PHP
从父页面读取和操作iframe中内容方法
2009/07/25 Javascript
键盘KeyCode值列表汇总
2013/11/26 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
JSONP基础知识详解
2017/03/19 Javascript
vue之数据交互实例代码
2017/06/20 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
jQuery使用bind函数实现绑定多个事件的方法
2017/10/11 jQuery
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
微信小程序实现带缩略图轮播效果
2018/11/04 Javascript
微信小程序国际化探索实现(附源码地址)
2020/05/20 Javascript
[01:33:07]VGJ.T vs Newbee Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
2014/02/24 Python
全面分析Python的优点和缺点
2018/02/07 Python
python opencv设置摄像头分辨率以及各个参数的方法
2018/04/02 Python
浅谈keras的深度模型训练过程及结果记录方式
2020/01/24 Python
解决keras加入lambda层时shape的问题
2020/06/11 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
HTML5页面直接调用百度地图API获取当前位置直接导航目的地的实现代码
2018/03/02 HTML / CSS
高一政治教学反思
2014/01/28 职场文书
《小熊住山洞》教学反思
2014/02/21 职场文书
暑期社会实践先进个人主要事迹
2014/05/22 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
党支部班子“四风”问题自我剖析材料
2014/09/28 职场文书
2014年库房工作总结
2014/11/26 职场文书
恋恋笔记本观后感
2015/06/16 职场文书
省级三好学生主要事迹材料
2015/11/03 职场文书
2019生态环境保护倡议书!
2019/07/03 职场文书
vue中三级导航的菜单权限控制
2021/03/31 Vue.js
浅谈mysql执行过程以及顺序
2021/05/12 MySQL
详解Redis主从复制实践
2021/05/19 Redis