django中与表单相关的字段及其验证器
来源:互联网 发布:我想做淘宝怎么弄 编辑:程序博客网 时间:2024/05/18 02:44
form.py
from django import formsdef words_validator(comment): if len(comment) < 4: raise ValidationError('Not Enough words')class CommentForm(forms.Form): name = forms.CharField(max_length=50) comment = forms.CharField( validators = [words_validator] )
def password_validator(comment): if len(password) < 8: raise ValidationError('请输入八位数以上的密码') if [0,1,2,3,4,5,6,7,8,9] in password: raise ValidationError('请输入至少一个数字')
绑定表单
if request.method == "POST": data = request.POST form = CommentForm(data)
if request.method == 'POST': data = {'name':'geeklee','class':'学霸班'} form = CommentForm(data)
if form.is_valid(): name = form.cleaned_data['name'] comment = form.cleaned_data['comment'] c = Comment(name=name,comment=comment) c.save() return redirect(to='detail')#判断表单的数据是否通过验证,如果通过验证就放到cleaned_data里面存起
1.form类的运行顺序是init,clean,validte,save
其中clean和validate会在form.is_valid()方法中被先后调用。(这里留有一个疑问,结构完全相同的两个form,但是一个为先验证后clean,另一个先clean后验证。原因不明。)
这里https://docs.djangoproject.com/en/dev/ref/forms/validation/给的是先验证后clean2.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属性字典赋值。
- django中与表单相关的字段及其验证器
- python django表单及其表单验证
- angularjs-表单与验证-表单的嵌套及其声明
- Django中与Html相关的filter
- Django中与Html相关的filter
- Django-表单字段
- Django表单和域的验证
- JavaScript表单字段常用的验证代码
- Webwork的表单验证及其国际化
- 验证Extjs表单字段
- 大量表单字段验证
- HTML5表单及其验证
- HTML5表单及其验证
- HTML5表单及其验证
- HTML5表单及其验证
- HTML5表单及其验证
- HTML5表单及其验证
- HTML5表单及其验证
- FFMPEG学习【libavcodec】:核心函数以及结构体(二)
- python csv模块使用
- Redis集群版在Java中的应用以及和spring结合
- 随堂笔记
- 查询统计ARM模型下VHD实际计费大小
- django中与表单相关的字段及其验证器
- hello world
- 135. Candy
- sublime简单配置git
- Android App 自定义权限重名不能安装解决办法
- Android SurfaceView实战 打造抽奖转盘
- 欢迎使用CSDN-markdown编辑器
- notify机制
- Android 数据--LitePal