0

我目前已经实现了来自 formtools 包的 SessionWizardView。

class DataframeFormView(SessionWizardView):
    def done(self,form_list):
       params={}
        for form in form_list:
            params.update(form.cleaned_data)
        return HttpResponseRedirect(reverse('download',kwargs={'params':params}))

在表单视图中一切正常,当表单成功填写时,上述函数运行,但是我需要将 params 参数传递给另一个视图:

from django_downloadview import VirtualDownloadView, VirtualFile
class DataframeDownloadView(VirtualDownloadView):
    def get_file(self):
         ### Access params dictionary here!!!!

        return VirtualFile(tfile.name, name=tfile.name)

我试过的东西:

1)覆盖__init__添加self.params = kwargs.pop('params')

2) 使用创建方法来访问 kwargs 特定的关键参数return self.kwargs['params']

3)Mixin 解决方案(可能实施得很糟糕,但我认为这两个 CBV 存在限制)

最终,使用方法 1 和 2,我设法通过反转到 download/url/ 仅访问 params 字典的字符串表示形式。我需要一个更加程序化的解决方案来获取原始的 dict 对象。TLDR:如何在视图之间传递复杂的对象。

此致,

4

1 回答 1

0

正如 kungphu 所建议的,在视图之间共享复杂对象的最佳方式可能是使用视图会话。为了将来参考,我最终做了以下事情:

def done(self,form_list,**kwargs):
    params={}
    for form in form_list:
        params.update(form.cleaned_data)
    self.request.session['params']=params
    return HttpResponseRedirect(reverse(self.download_url_name))

而且我还将会话序列化程序更改为pickle。

于 2018-11-09T18:27:55.687 回答