使用此表单:
class Form(forms.Form):
name = forms.CharField(required=False, initial='Hello world')如果我在视图中这样做:
form = Form(request.GET)
if form.is_valid():
name = form.cleaned_data['name']则即使request.GET不包含name作为关键字,名称的初始值也会丢失。有什么变通方法吗?我希望初始值作为“默认值”来绑定表单。
发布于 2013-06-22 20:14:56
通过稍微修改贡萨罗的解决方案,这是正确的方式:
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']如果你需要这个,你可以看看django-filter应用。我最近发现了这一点。
发布于 2013-04-16 08:39:26
initial实际上并不是用来设置表单域的默认值。相反,在向用户显示表单时,它实际上更像是一个占位符实用程序,如果字段不是必需的,它将不能很好地工作(就像您的示例中一样)。
您可以做的是使用define a clean_方法检查该字段是否为空值,并返回默认值:
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发布于 2013-12-01 15:21:59
我使用以下模式将默认值设置为表单给定的初始值-
class InitialDefaultForm(forms.Form):
def clean(self):
cleaned_data = super(InitialDefaultForm, self).clean()
# if data is not provided for some fields and those fields have an
# initial value, then set the values to initial value
for name in self.fields:
if not self[name].html_name in self.data and self.fields[name].initial is not None:
cleaned_data[name] = self.fields[name].initial
return cleaned_data这可确保所有具有初始值且未从用户处获取值的字段都使用其初始值进行填充。
https://stackoverflow.com/questions/16026479
复制相似问题