小编Psy*_*rre的帖子

在 get_form() 期间覆盖 Django ModelForm 实例中的值

我有一个带有通用 UpdateView 的模型“SavedSearch”。每个站点用户可以有一个已保存的搜索。在网站上运行搜索时,我想让他们能够单击“保存此搜索”按钮,该按钮将带他们进入当前 SavedSearch 模型的编辑表单,并将其值替换为搜索中的值(保存在请求.会话.参数)。

因此,我试图捕获模板途中的绑定表单并替换一些值而不保存,以便用户有机会编辑选项或改变主意并取消。

我尝试更新 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
Run Code Online (Sandbox Code Playgroud)

我还尝试传递request到表单的__init__via get_form_kwargs(),然后在表单的 init 中执行与上面几乎相同的操作。这两种策略都不会导致表单数据发生任何变化。

我还尝试传递requestget_form_kwargs()然后进入__init__

def __init__(self, *args, **kwargs):
    request = …
Run Code Online (Sandbox Code Playgroud)

django django-forms django-generic-views

6
推荐指数
1
解决办法
2818
查看次数