• 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 
  • 相关阅读:
    Balanced Binary Tree
    Convert Sorted List to Binary Search Tree
    Convert Sorted Array to Binary Search Tree
    Binary Tree Zigzag Level Order Traversal
    Validate Binary Search Tree
    Binary Tree Level Order Traversal II
    Binary Tree Level Order Traversal
    Maximum Depth of Binary Tree
    如何把U盘的两个盘或者多个盘合成一个
    bugku 想蹭网先解开密码
  • 原文地址:https://www.cnblogs.com/lxgbky/p/13625702.html
Copyright © 2020-2023  润新知