使用此表单:
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键,也会丢失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']
如果你需要这个,你可以看看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
| 归档时间: | 
 | 
| 查看次数: | 12543 次 | 
| 最近记录: |