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获取脚本所在目录的正确方法
Apr 15 Python
寻找网站后台地址的python脚本
Sep 01 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
Jun 14 Python
使用Python实现从各个子文件夹中复制指定文件的方法
Oct 25 Python
Python for循环与range函数的使用详解
Mar 23 Python
python函数的万能参数传参详解
Jul 26 Python
Python编写带选项的命令行程序方法
Aug 13 Python
PyTorch中常用的激活函数的方法示例
Aug 20 Python
Python多线程实现支付模拟请求过程解析
Apr 21 Python
python批量处理多DNS多域名的nslookup解析实现
Jun 28 Python
浅谈Python 命令行参数argparse写入图片路径操作
Jul 12 Python
Python如何进行时间处理
Aug 06 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
mysql下创建字段并设置主键的php代码
2010/05/16 PHP
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
2014/01/15 PHP
php实现图片按比例截取的方法
2017/02/06 PHP
PHP单例模式简单用法示例
2017/06/23 PHP
php 二维数组快速排序算法的实现代码
2017/10/17 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
PHP Trait功能与用法实例分析
2020/06/03 PHP
基于datagrid框架的查询
2013/04/08 Javascript
javascript 操作符(~、&amp;、|、^、)使用案例
2014/12/31 Javascript
JavaScript学习笔记之定时器
2015/01/22 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
angularjs学习笔记之双向数据绑定
2015/09/26 Javascript
JavaScript实现横向滑出的多级菜单效果
2015/10/09 Javascript
jQuery插件Validate实现自定义表单验证
2016/01/18 Javascript
JavaScript tab选项卡插件实例代码
2016/02/23 Javascript
Bootstrap 组件之按钮(二)
2016/05/11 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
关于 jQuery Easyui异步加载tree的问题解析
2016/12/06 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
对象不支持indexOf属性或方法的解决方法(必看)
2017/05/28 Javascript
浅谈JS对象添加getter与setter的5种方法
2018/06/09 Javascript
创建echart多个联动的示例代码
2018/11/23 Javascript
javascript实现日历效果
2019/06/17 Javascript
测试、预发布后用python检测网页是否有日常链接
2014/06/03 Python
全面了解python字符串和字典
2016/07/07 Python
解决Python3 抓取微信账单信息问题
2019/07/19 Python
Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
2020/01/25 Python
keras实现theano和tensorflow训练的模型相互转换
2020/06/19 Python
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
南威尔士家居商店:Leekes
2016/10/25 全球购物
《翻越远方的大山》教学反思
2014/04/13 职场文书
优秀团队申报材料
2014/12/26 职场文书
人事局接收函
2015/01/30 职场文书
仓库统计员岗位职责
2015/04/14 职场文书
MySQL数据库⾼可⽤HA实现小结
2022/01/22 MySQL