Сложные объекты, передаваемые как 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))

и я также изменил сериализатор сеансов на маринование.

Другие вопросы по тегам