zoukankan      html  css  js  c++  java
  • django_form 笔记

    参考一:https://github.com/rishinkaku/code-snippets/blob/master/django/forms.adoc

    参考二: 如下

    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。

    post后,form.data可以拿到值

    form.is_valid() 或 clean之后,form.cleaned_data里面可以拿到值了。
    form.data的值的类型不可以直接保存到model. 而form.cleaned_data可以。
    ModelForm中,ModelForm.instance.xxxx =form.cleaned_data['xxxxx']不会报错,用from.data['xxxxx']可能会保错
    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的四种初始化方式 ①ModelForm的实例化:oneform(instanse=onemodel_instance)) ②实例化:oneform(initial={'onefield':value}) ③重写Form类的__init__()方法:self.fields['onefield'].initial = value # 需在super().__init__之后执行,否则会被super().__init__覆盖 ④定义字段时给初始化值:oneformfield = forms.CharField(initial=value) 以上4种方式的优先级:① > ② > ③ > ④ 详细执行顺序可参考源码:django/forms/models.py/BaseModelForm 
  • 相关阅读:
    情报收集:Metasploit命令、查询网站和测试网站
    Hbase 学习笔记5----hbase region, store, storefile和列簇的关系
    Hbase 学习笔记4----原理
    Hbase 学习笔记3----操作以及维护
    Hbase 学习笔记2----概念
    Hbase 学习笔记1----shell
    Flume日志收集 总结
    Hadoop应用开发实战案例 第2周 Web日志分析项目 张丹
    2016.4.9-关于“放生”反而促进“捕猎”的思考
    Hadoop应用开发实战案例 第1周 基本介绍
  • 原文地址:https://www.cnblogs.com/lxgbky/p/13625702.html
Copyright © 2011-2022 走看看