Django中基于类的视图之间以args/kwargs形式传递的复杂对象



我目前已经实现了一个来自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( 创建使用return self.kwargs['params']访问kwargs特定密钥参数的方法

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

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

致问候,

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

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。

最新更新