Django表单Form类对空值None的替换

最近在写项目的时候用到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属性的值。
如果本文对你有帮助,记得点几下顶,让更多的人看见哟。

原文地址:https://www.cnblogs.com/yunen/p/11854418.html