最近在写项目的时候用到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属性的值。

如果本文对你有帮助,记得点几下顶,让更多的人看见哟。

05-11 22:11