最近在寫項目的時候用到Form,發現這個類什么都好,就是有些空值的默認賦值真是很不合我胃口。
查閱資料、官方文檔后發現並沒有設置該值的方式。於是,便開始了我的踩坑之路......
不過現在完美解決了,方法也挺簡單的。
簡單的說:建一個基礎類,重載form.Forms的clean函數。
下邊給出例子:
class BaseForm(forms.Form):
# 重載clean方法
def clean(self):
# 遍歷字典
cleaned_data = {}
for key, value in self.cleaned_data.items():
if value == None:
cleaned_data[key] = self.fields[key].initial
else:
cleaned_data[key] = value
return cleaned_data
這里我選擇將他的值設置為Field中的initial屬性的值,便於我維護。
具體的Form類繼承BaseForm類即可。
如:
class NewForm(BaseForm):
name = forms.CharField(label='名稱')
age = form.IntegerField(
label='年齡',
required=False
)
測試數據為:
name=test&age=
age的值為空,此時如果繼承的form.Form類,那么cleaned_data的值為:
{'name': 'test', 'age': None}
這是我不願看到的結果,雖然部分Field存在empty_value屬性可以設置,不過目前IntegerField字段並沒有該屬性值,使用本文方法即可將None值修改為自己定義的initial屬性的值。
如果本文對你有幫助,記得點幾下頂,讓更多的人看見喲。