django form关于clean及cleaned_data的说明 以及4种初始化
来源:互联网 发布:细说php下载 编辑:程序博客网 时间:2024/06/05 18:53
今天头针对form里的几个方法讲了不少东西,顿时茅塞顿开
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属性字典赋值。
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属性字典赋值。
0 0
- django form关于clean及cleaned_data的说明 以及4种初始化
- 关于django model form
- form clean
- 基于 Django1.10 文档的深入学习(24)—— Form and field validation 之 cleaned_data
- 关于struct的初始化的说明
- Django Form之动态数据初始化
- 关于django form.as_table 不能在前端显示的wenti
- Django 的 form类
- Django的form表单
- web.xml中关于log4j的设置及范例说明 以及关于webapp.root
- 关于clean code 的感想
- Mavne关于clean的问题
- Eclipse中如何clean项目以及clean的作用
- Eclipse中如何clean项目以及clean的作用
- 关于volatile关键字的说明以及测试
- 关于volatile关键字的说明以及测试
- 关于volatile关键字的说明以及测试
- 关于volatile关键字的说明以及测试
- swift详解之十四 -----------NSThread 异步下载图片
- 题目:二叉查找树中搜索区间
- HDU 1853--Cyclic Tour【最小费用最大流 && 有向环最小权值覆盖 】
- ZOJ 2104解题报告
- Java集合之Map
- django form关于clean及cleaned_data的说明 以及4种初始化
- 题目:二叉树中的最大路径和
- Android屏幕适配全攻略(最权威的官方适配指导)
- POJ 3185 The Water Bowls(高斯消元法,枚举自由变元)
- 开发中遇到detached head的解决方法
- install scrapy
- 关于继承的问题的一些讨论
- (5)Django框架学习-Forms篇
- python处理文本一处代码优化过程