Python 更新Form.initial不会更改Django模板中的初始值 目标

Python 更新Form.initial不会更改Django模板中的初始值 目标,python,django,django-forms,django-views,django-templates,Python,Django,Django Forms,Django Views,Django Templates,我希望在呈现搜索结果时保留查询 失败的解决方案 这些是最少的代码示例 #search_results.html {%csrf_令牌%} {{form}} #views.py ... 类SearchView(TemplateView): “搜索视图” def表单_有效(自身、表单): “”“重定向到具有url参数的成功url”“” quoted_user_query=urllib.parse.quote_plus(form.cleanned_data['user_query'])) 返回Http

我希望在呈现搜索结果时保留查询

失败的解决方案 这些是最少的代码示例

#search_results.html
{%csrf_令牌%}
{{form}}
#views.py
...
类SearchView(TemplateView):
“搜索视图”
def表单_有效(自身、表单):
“”“重定向到具有url参数的成功url”“”
quoted_user_query=urllib.parse.quote_plus(form.cleanned_data['user_query']))
返回HttpResponseRedirect(“”.join([self.get_success_url(),quoted_user_query]))
def获取上下文数据(自我。**kwargs):
context=super()。获取上下文(**kwargs)
user\u query=self.request.GET.GET('q',无)
form.initial={'user\u query':user\u query}
返回上下文
def get_success_url(自我):
“”“使用搜索查询追加成功url”“”
如果不是self.success\u url:
raise配置不正确({}没有成功的url)。格式((str(self)))
返回“”。加入([str(self.success_url),'?q=')
第一次在浏览器中搜索时,模板按预期呈现。如果我搜索
foo
将呈现以下内容


我认为您没有通过
self.request.GET.GET('q',None)
获得任何值,因为表单中输入字段的名称是
user\u query
。所以试着这样做:

class SearchView(TemplateView):
    """Search view"""
    def get_context_data(self. **kwargs):
        context = super().get_context(**kwargs)
        user_query = self.request.GET.get('user_query', None)
        context['form'] = SearchBar(initial = {'user_query': user_query})
        return context

还将表单方法从post更改为get ie

我发现了一个笨重的解决方案,它创建了一个新的表单实例,而不是更新
initial
属性

#views.py
...
类SearchView(TemplateView):
“搜索视图”
额外上下文={'form':SearchBar()}
def获取上下文数据(自我。**kwargs):
context=super()。获取上下文(**kwargs)
user\u query=self.request.GET.GET('q',无)
如果用户查询不是“无”:
context['form']=self.form\u类(数据={'user\u query':user\u query})
返回上下文
...

我在表单验证后向重定向url追加
?q=
。我已经用相关的代码更新了我的问题,而更改获取的方法可能是正确的,它没有解决原始问题