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/