函数名

说明clean_后面跟着的是需要校验字段名称

示例

class RelUserReset(forms.ModelForm):
def clean_confirm_password(self):
pass

校验顺序

说明:如果是继承的是Form对象,校验顺序就是字段在表单中的定义顺序。如果是继承的是ModelForm对象,校验顺序就是class Metafileds列表的顺序。

关于clean_data

说明:clean_data 里面装的是已经经过验证的字段。clean_data是一个字典。

错误示例

class RelUserReset(forms.ModelForm):
class Meta:
model = UserInfo
fields = ["password","confirm_password"]
#定义钩子函数
def clean_password(self):
psw = self.cleaned_data.get("password")
#报错点
confirm = self.cleaned_data.get("confirm_password")
if confirm != psw:
raise ValidationError("密码不一致")
return confirm

这里的代码块有点多,请耐心阅读

先关注函数名clean_password,由于表单验证是有顺序的,并且在fields列表里面confirm_passwordpassword之后,所以此时的confirm_password是没有经过校验的,也就是说cleaned_data里面还没有存在confirm_password的值,所以所有会出现报错。

解决方法:把钩子的函数名改成clean_confirm_password

最新文章

  1. 3、C#核心编程结构下
  2. Spring MVC 使用HiddenHttpMethodFilter配置Rest风格的URL
  3. node-webkit教程<>Native UI API 之Menu(菜单)
  4. 李洪强iOS开发之后使用XIB实现横向滚动的UIScrollView
  5. BZOJ 4636 蒟蒻的数列
  6. Backbone.js学习之Model
  7. poj2135
  8. java基础语法笔记
  9. Java配置文件Properties的读取、写入与更新操作
  10. Java 基础之 static 静态
  11. EMMC与RAND的区别
  12. python用ElemenTree快速高效的解析xml
  13. 老男孩python学习自修【第三天】列表用法
  14. 【git】提交代码到远程仓库
  15. Android开发 - 解决DialogFragment在全屏时View被状态栏遮住的问题
  16. Local Storage
  17. Python+Selenium笔记(八):操作下拉菜单
  18. kettle的安装、配置与运行
  19. 新电脑装不了win7?来试试我的方法!
  20. lastIndexOf()

热门文章

  1. postgresql 常用的删除重复数据方法
  2. LeetCode-1765 地图中的最高点
  3. 单一资产VAR风险--基于python
  4. 时钟切换电路(无毛刺)——clock switching glitch free
  5. ROS librviz库
  6. 解决scroll中addEventListener不生效的问题
  7. djangoDRF查询
  8. Mybatis学习笔记【狂神说】
  9. sqlite 数据更新
  10. CVE-2018-8174漏洞复现(IE浏览器远程代码执行漏洞)