django获取cleaned_data属性失败

  cleaned_data属性是调用了clean()方法之后才有的,如果在表单验证中使用  clean_字段名  方式定义了某个字段清洗函数,那么django会优先调用这个函数,最后调用clean()函数,如下:

def clean_mobile(self):
  mobile = self.cleaned_data['mobile'] #这样子写有时会取不到cleaned_data属性值,原因定义自定义的清洗函数对某些字段进行清洗后,该字段将会从cleaned_data属性中删除
                         #从而导致在cleaned_data属性中取不到该字段的值

  调用清洗函数,其实质就是将表单类型转化为python数据类型,假如表单中有两个字段,分别是mobile,password,在表单类中定义了clean_mobile清洗字段mobile(即由clean_mobile()方法完成字段mobile由表单类型转化为python数据类型)。

  在表单数据清洗的过程中是先调用clean()方法在调用clean_mobile()方法,得到cleaned_data属性,该属性里有两个键,分别是mobile,password。由于自定义了清洗函数clean_mobile会覆盖clean()(即mobile字段由clean_mobile()方法负责清洗,完成表单类型到python数据类型的转换),而且也会从cleaned_data属性中删除该字段,即cleaned_data属性中只含有password这一个字段,可通过login_form.cleaned_data['password']取得这个值。data属性包含了表单的所有字段值即data属性里保存了mobile,password的值,如下:

 

正确示例:

       

       

 

  以上代码只是告诉读者可以使用data 属性取得表单数据。    也可以使用形如:register_post_form.password.value 的形式在前端获取表单数据。

  

  注:读者可使用断点方式查看表单对象含有的字段。

  django官方文档相关介绍:https://docs.djangoproject.com/zh-hans/3.0/ref/forms/validation/

原文地址:https://www.cnblogs.com/xiaohaodeboke/p/12757934.html