Сложные объекты, передаваемые как args/kwargs между представлениями на основе классов в Django
В настоящее время у меня реализован SessionWizardView из пакета formtools.
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, мне удается получить доступ только к строковому представлению словаря params, обратившись к загрузке /url/. Мне нужно более простое решение для получения оригинального объекта dict. TLDR: как я могу передавать сложные объекты между представлениями.
С наилучшими пожеланиями,
1 ответ
Как предположил 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))
и я также изменил сериализатор сеансов на маринование.