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/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM