Сложные объекты, передаваемые как args / kwargs между представлениями на основе классов в Django - PullRequest
0 голосов
/ 08 ноября 2018

В настоящее время у меня реализован 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) Смешанное решение (возможно, плохо реализовано, но я думаю, что в этих двух CBV есть ограничения)

В конечном счете, используя метод 1 и 2, мне удается получить доступ только к строковому представлению словаря параметров через обращение к ссылке / url /. Мне нужно более простое решение, чтобы получить оригинальный объект dict. TLDR: как я могу передавать сложные объекты между представлениями.

С уважением,

1 Ответ

0 голосов
/ 09 ноября 2018

Как предположил 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...