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 2019-11-13 23:19:09 +08:00
|
2
Yunen OP @ManjusakaL initial 并不能实现这个功能,只能是在 render 模板时给 field 的默认值。已测试过:( 感谢回复。
|
3
676529483 2019-11-13 23:50:22 +08:00 1
默认使用 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 2019-11-14 00:13:28 +08:00
|