使用此表单:
class Form(forms.Form):
name = forms.CharField(required=False, initial='Hello world')
Run Code Online (Sandbox Code Playgroud)
如果我在视图中执行以下操作:
form = Form(request.GET)
if form.is_valid():
name = form.cleaned_data['name']
Run Code Online (Sandbox Code Playgroud)
然后,即使request.GET不包含name键,也会丢失name的初始值.有没有解决方法?我希望初始值可以将表单绑定为"默认值".
通过略微修改Gonzalo的解决方案,这是正确的方法:
class Form(forms.Form):
name = forms.CharField(required=False, initial='Hello world')
def clean_name(self):
if not self['name'].html_name in self.data:
return self.fields['name'].initial
return self.cleaned_data['name']
Run Code Online (Sandbox Code Playgroud)
如果你需要这个,你可以看看django-filter app.我最近才发现它.
initial实际上并不意味着用于设置表单字段的默认值.相反,在向用户显示表单时,它实际上更像是一个占位符实用程序,如果不需要该字段,则无法正常工作(如示例所示).
你可以做的是定义一个clean_<fieldname>方法,检查该字段是否有空值并返回默认值:
class Form(forms.Form):
name = forms.CharField(required=False, initial='Hello world')
def clean_name(self):
name = self.cleaned_data['name']
if name is None:
return self.fields['name'].initial
return name
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12543 次 |
| 最近记录: |