1.form类的运行顺序是init,clean,validte,save
其中clean和validate会在form.is_valid()方法中被先后调用。(这里留有一个疑问,结构完全相同的两个form,但是一个为先验证后clean,另一个先clean后验证。原因不明。)
这里https://docs.djangoproject.com/en/dev/ref/forms/validation/给的是先验证后clean

2.cleaned_data中的值类型与字段定义的Field类型一致。
如果字段定义charfield,那么clean方法返回的cleaned_data中对应的字段值就是字符型,
定义为ModelChoiceField,则cleaned_data中字段值是某个model实例。
定义为ModelMultipleChoiceField,则cleaned_data中字段值是个model实例list。

3.clean等步骤遇到的异常:Exception Value: argument of type 'NoneType' is not iterable.
可能是cleaned_data中某个字段值应该是个列表,实际上却是空值。

4.ModelForm的Meta类中定义的fields
默认的Field是Model中定义的Field,如需更改,可在Form类内以同名字段覆盖,比如自定义widget和required属性等。
不管字段在form中怎么自定义,cleaned_data中对应的值都必须按照model中定义的字段类型取值,否则校验不通过或保存时报错。

暂时记这几条,form还可以重写init、save方法,并且可以自定义方法。如果对这几个东西不懂,想办法找例子读一遍就懂了。

※※※ clean方法重写时一定不要忘了return cleaned_data ※※※

补充:
5.form的四种初始化方式
①实例化oneform(initial={'onefield':value})
②定义字段时给初始化值oneformfield = forms.CharField(initial=value)
③重写Form类的__init__()方法:self.fields['onefield'].initial = value
④当给form传参instanse(即oneform(instanse=onemodel_instance))时,前三种初始化方法会全部失效,即使重写__init__时,先调用父类的__init__再使用方法③,仍然无效(不是很爽)。
这时想重新初始化字段值只能在__init__()里 self.initial['title'] = value,直接对Form类的initial属性字典赋值。

 
 
原文章地址:https://www.douban.com/note/296298497/

django form关于clean及cleaned_data的说明 以及4种初始化的更多相关文章

  1. django form使用学习记录

    Django forms使用容易, 又方便扩展, 因此Django admin和CBVs基本都基于forms使用. 事实上, 由于django forms的强大验证功能, 大多数Django API ...

  2. Django Form的学习

    django.forms 是Django处理form的库      本质上可以直接通过对HttpRequest达到同样的效果,但是django.from带来更便捷的处理方式.功能有几点 通过form类 ...

  3. django form表单验证

    一. django form表单验证引入 有时时候我们需要使用get,post,put等方式在前台HTML页面提交一些数据到后台处理例 ; <!DOCTYPE html> <html ...

  4. Django Form表单学习总结

    Form中添加自定义的验证:    1.对特定字段属性的验证;    2.包含多字段的验证. 先创建一个简单的Form: from django import forms class ContactF ...

  5. Python Web框架篇:Django Form组件

    Form简介 在HTTP中,表单(form标签),是用来提交数据的,其action属性说明了其传输数据的方法:如何传.如何接收. 访问网站时,表单可以实现客户端与服务器之间的通信.例如查询,就用到了表 ...

  6. Django form表单

    Form介绍 之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来.与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入, ...

  7. django Form组件

    django Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1.创建 ...

  8. Django Form和ModelForm组件

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

  9. 9.24 Django Form组件

    2018-9-23 20:10:04 这两天优化了自己图书管理系统 github 连接:https://github.com/TrueNewBee/pythonDemo 顺便整理了博客,写了好多总结, ...

随机推荐

  1. Android:控件AutoCompleteTextView 客户端保存搜索历史自动提示

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  2. Tomcat 管理页面

    一.配置刚下载的解压版的apache-tomcat,启动后,通过浏览器访问:http://127.0.0.1:8080/(或者http://localhost:8080)然后点击下图的Server s ...

  3. mysql shell

    mysql 查询10分钟以内的数据:select *from t_agent where int_last_login>=CURRENT_TIMESTAMP - INTERVAL 10 MINU ...

  4. Linux进程调度和切换过程分析

    内容: (1):从schedule()开始,几种不同类型的进程之间的调度选择;在相同类型的进程之间的调度选择算法 (2):从CPU的IP值的变化上,说明在switch_to宏执行后,执行分析 (3): ...

  5. 自定义View(3)关于canas.drawText

    本文以Canvas类的下面这个函数为基础,它用来在画布上绘制文本. public void drawText(String text, float x, float y, Paint paint) 效 ...

  6. json格式的字符串转为json对象遇到特殊字符问题解决

    中午做后台发过来的json的时候转为对象,可是有几条数据一直出不来,检查发现json里包含了换行符,造成这种情况的原因可能是编辑部门在编辑的时候打的回车造成的 假设有这样一段json格式的字符串 va ...

  7. C#中结构体的声明

    定义:       结构是用户自定义的值类型 代码样式:struct Pair{    public int X, Y; //公有变量名单词的首字母大写(PascalCase规则)}struct Pa ...

  8. codeforces 334B - Eight Point Sets

    题意难懂,其实就是x1<x2<x3与y1<y2<y3两两组合成九个点,去掉(x2,y2),剩余八个.这样的八个点才是满足要求的. 忘去重了 #include<cstdio ...

  9. Xcode5 编译ffmpeg,arm64版本;H264

    编译选项:./configure  —-cc=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchai ...

  10. jQuery的datatable怎么才能给某一列添加超链接?

    aocolumeDef.这个里面去定义.return返回的字符串会代替原来cell里面的内容 e.g: datatable=$('#dt_basic').dataTable({ "bAuto ...