【发布时间】:2015-02-14 11:19:21
【问题描述】:
我有一个带有通用 UpdateView 的模型“SavedSearch”。每个站点用户可以有一个保存的搜索。在网站上运行搜索时,我想让他们能够单击“保存此搜索”按钮,该按钮会将他们带到当前 SavedSearch 模型的编辑表单,并将其值替换为搜索中的值(保存在request.session.params)。
所以,我试图在前往模板的途中捕获绑定的表单并替换一些值而不保存,以便用户有机会编辑选项或改变主意并取消。
我已尝试更新 get_form() 中的实例字段:
def get_form(self, form_class):
form = super(SavedSearchUpdateView, self).get_form(form_class)
# if request is coming from a search form "save" click,
# replace form context data with options from search form.
if self.request.GET.get('ss_override') and self.request.session.get('params', None):
params = self.request.session["params"]
if params.get('location', None): form.instance.location_keywords = params.get('location')
# ... etc.
return form
我还尝试通过get_form_kwargs() 将request 传递给表单的__init__,然后在表单的init 中执行与上面几乎相同的操作。这两种策略都不会导致表单数据发生任何变化。
我还尝试将request 传递给get_form_kwargs(),然后传递给__init__:
def __init__(self, *args, **kwargs):
request = kwargs.pop('request')
super(DreamHomePreferenceForm, self).__init__(*args, **kwargs)
# if request is coming from a property search form "save" click,
# replace form context data with options from search form.
if request.GET.get('ehf_override') and request.session.get('params', None):
params = request.session["params"]
new_data = {}
if params.get('location', None): new_data['location_keywords'] = params.get('location')
self.data = self.data.update(new_data)
这也不会导致表单显示发生变化。我还尝试在get_form_kwargs() 中完全覆盖数据kwarg,但随后表单尝试立即验证,并且不在新data 中的任何字段显示错误。
如果有人能推动正确的方向,我将不胜感激。
【问题讨论】:
标签: django django-forms django-generic-views