django表单:绑定表单的默认值

问题描述:

使用以下格式:

class Form(forms.Form):
    name = forms.CharField(required=False, initial='Hello world')

如果我在视图中执行以下操作:

If I do something like this in the view:

form = Form(request.GET)
if form.is_valid():
    name = form.cleaned_data['name']

然后,即使request.GET不包含name的初始值也会丢失名称作为键。有什么解决方法吗?我希望初始值可以将表格绑定为默认值。

Then initial value of name is lost even if request.GET does not contain name as key. Is there any workaround? I would like initial values work to bound forms as "default values".

通过略微修改Gonzalo的解决方案,这是正确的方式:

By slightly modifying Gonzalo's solution, this is the right way:

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应用程序。我是最近才发现的。


If you need this, you may have a look at django-filter app. I have discovered it quite recently.