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实现爬虫下载漫画示例
Feb 16 Python
使用Python编写爬虫的基本模块及框架使用指南
Jan 20 Python
基于scrapy的redis安装和配置方法
Jun 13 Python
在cmder下安装ipython以及环境的搭建
Oct 19 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
Jan 17 Python
python实现感知机线性分类模型示例代码
Jun 02 Python
Tensorflow训练MNIST手写数字识别模型
Feb 13 Python
Python基于stuck实现scoket文件传输
Apr 02 Python
Django中文件上传和文件访问微项目的方法
Apr 27 Python
Spring http服务远程调用实现过程解析
Jun 11 Python
Python Http请求json解析库用法解析
Nov 28 Python
python实现三次密码验证的示例
Apr 29 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实现与erlang的二进制通讯实例解析
2014/07/23 PHP
php实现excel中rank函数功能的方法
2015/01/20 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
2015/11/30 PHP
php redis实现对200w用户的即时推送
2017/03/04 PHP
PHP观察者模式实例分析【对比JS观察者模式】
2019/05/22 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
2020/05/27 PHP
js null undefined 空区别说明
2010/06/13 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
2013/05/07 Javascript
CSS+jQuery实现的一个放大缩小动画效果
2013/09/24 Javascript
js中继承的几种用法总结(apply,call,prototype)
2013/12/26 Javascript
javascript Deferred和递归次数限制实例
2014/10/21 Javascript
javascript验证身份证号
2015/03/03 Javascript
在Linux系统中搭建Node.js开发环境的简单步骤讲解
2016/01/26 Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
2016/12/22 Javascript
原生js实现可拖动的登录框效果
2017/01/21 Javascript
在页面中引入js的两种方法(推荐)
2017/08/29 Javascript
JS简单实现查看文档创建日期、修改日期和文档大小的方法示例
2018/04/08 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
python安装Scrapy图文教程
2017/08/14 Python
Python安装Numpy和matplotlib的方法(推荐)
2017/11/02 Python
Python使用Tkinter实现机器人走迷宫
2018/01/22 Python
python多行字符串拼接使用小括号的方法
2020/03/19 Python
python实现读取excel文件中所有sheet操作示例
2019/08/09 Python
python 发送json数据操作实例分析
2019/10/15 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
python常用运维脚本实例小结
2020/02/14 Python
Flask和pyecharts实现动态数据可视化
2020/02/26 Python
Django实现celery定时任务过程解析
2020/04/21 Python
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
2013届毕业生求职信范文
2013/11/20 职场文书
yy婚礼主持词
2014/03/14 职场文书
大宝sod蜜广告词
2014/03/21 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
PostgreSQL逻辑复制解密原理解析
2022/09/23 PostgreSQL