
Django 菜鸟问个关于 Form 类 Field 为空时默认值的问题。:) 例如:
from django import forms class NewForm(forms.Form): name = forms.CharField(label='名称') age = form.IntegerField( label='年龄', required=False ) def test(request): form = NewForm(request.POST) print(form.cleaned_data) 如果 Post 的数据为
name=test&age= 输出
{'name':'test','age': None} 请问有没有什么好的方法,能实现检测 age 是否存在,若不存在则设置为 defaultage 如:
age = request.POST.get('age', defaultage) 1 ManjusakaL Nov 13, 2019 |
2 Yunen OP @ManjusakaL initial 并不能实现这个功能,只能是在 render 模板时给 field 的默认值。已测试过:( 感谢回复。 |
3 676529483 Nov 13, 2019 默认使用 empty_value,暂时只想到 2 种方法 1、自己写自定义字段 2、如果只是参数校验,不需要模版语言的话,改用其他验证插件,比如 pydantic、marshallow 期待大佬更好的方法 |
4 Yunen OP @676529483 自己写字段有点麻烦(项目有多个 Form),插件的话没用过不知道:) 我刚刚在研究了一下,决定在原 Form 的基础上重载他的 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 ``` 其他 Form 类只需要继承这个类就好了 例如上文的 ``` class NewForm(forms.Form): ... ) 改为 class NewForm(BaseForm): ... ) ``` |
5 676529483 Nov 14, 2019 |