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发送SMTP邮件的教程
Apr 29 Python
Python IDE PyCharm的基本快捷键和配置简介
Nov 04 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
Dec 15 Python
使用Python从零开始撸一个区块链
Mar 14 Python
python抓取搜狗微信公众号文章
Apr 01 Python
python实现布隆过滤器及原理解析
Dec 08 Python
Python3中的f-Strings增强版字符串格式化方法
Mar 04 Python
Python爬虫实例——爬取美团美食数据
Jul 15 Python
OpenCV图片漫画效果的实现示例
Aug 18 Python
python自动从arxiv下载paper的示例代码
Dec 05 Python
python 模拟登陆163邮箱
Dec 15 Python
k-means & DBSCAN 总结
Apr 27 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
只需一行代码,轻松实现一个在线编辑器
2013/11/12 Javascript
借助javascript代码判断网页是静态还是伪静态
2014/05/05 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
jQuery插件scroll实现无缝滚动效果
2015/04/27 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
AngularJS 过滤器(自带和自建)详解
2016/09/19 Javascript
简单谈谈CommonsChunkPlugin抽取公共模块
2017/12/31 Javascript
一步步教你利用Docker设置Node.js
2018/11/20 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
借助云开发实现小程序短信验证码的发送
2020/01/06 Javascript
小程序跨页面交互的作用与方法详解
2020/01/07 Javascript
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
[05:31]干嘛呢兄弟!DOTA2 TI9语音轮盘部分出处
2019/05/14 DOTA
Python的Flask框架与数据库连接的教程
2015/04/20 Python
Python的净值数据接口调用示例分享
2016/03/15 Python
python爬虫_微信公众号推送信息爬取的实例
2017/10/23 Python
python计算日期之间的放假日期
2018/06/05 Python
Python pymongo模块常用操作分析
2018/09/01 Python
使用Python制作自动推送微信消息提醒的备忘录功能
2018/09/06 Python
selenium+python 对输入框的输入处理方法
2018/10/11 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
2018/12/19 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
2020/01/03 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
2020/02/21 Python
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
美国全球旅游运营商:Pacific Holidays
2018/06/18 全球购物
大学团支书的自我评价分享
2013/12/14 职场文书
艺校音乐专业自我鉴定范文
2014/03/01 职场文书
2014年党员自我评价材料
2014/09/22 职场文书
个人党性分析材料
2014/12/19 职场文书
2015年电工工作总结
2015/04/10 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
庆七一活动简报
2015/07/20 职场文书
2016年国庆节67周年活动总结
2016/04/01 职场文书
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers