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 
  • 相关阅读:
    深圳移动 神州行(大众卡/轻松卡/幸福卡)套餐资费(含香港日套餐)信息及使用方法
    PHP设置时区,记录日志文件的方法
    微信公众平台消息接口使用指南
    C#日期时间格式化
    使用CMD实现批量重命名[转]
    Python高效编程技巧
    实用WordPress后台MySQL操作命令
    ubuntu-wine
    Javascript 笔记与总结(2-8)对象2
    Swift5.3 语言指南(十) 枚举
  • 原文地址:https://www.cnblogs.com/lxgbky/p/13625702.html
Copyright © 2011-2022 走看看