Django FormWizard - показать сводку по завершении

Я использую Django FormWizard для многоступенчатой ​​формы, и в качестве последнего шага (после сохранения данных) я хотел бы показать сводку ранее введенных данных формы.

Я могу добиться этого, переопределив метод done () следующим образом:

def done(self, form_list, **kwargs):
    info = self.save_info(form_list[0])
    extra = self.save_extra(info, form_list[1])
    # how to provide context for redirect?
    # return redirect('confirmation.html')
    # this works, but uses POST
    return render_to_response(
        'confirmation.html',
        {'form_list': [form.cleaned_data for form in form_list]},
        context_instance=RequestContext(self.request)
    ) 

Вместо того, чтобы вызывать подтверждение через POST, я хотел бы использовать перенаправление (кнопка возврата в браузере). Но я не уверен, как передать form_list в представление / шаблон, поскольку перенаправления не принимают контекст. Есть идеи, есть ли чистый стандартный способ сделать это?

Примечание: данные вводятся анонимным пользователем. Таким образом, сохраненные данные и пользователь не связаны.


person mzu    schedule 17.09.2012    source источник


Ответы (2)


Вы также можете сохранить данные формы в сеансе и получить эту информацию при вызове представления confirm.html.

Если вы используете это, я бы посоветовал установить SESSION_EXPIRE_AT_BROWSER_CLOSE = True или время истечения срока для сеанса.

person het.oosten    schedule 17.09.2012
comment
Хех да. В итоге я использовал сеанс, но этого было достаточно, чтобы просто добавить один ключ поиска. Спасибо, буду учитывать время истечения срока сеанса. - person mzu; 17.09.2012

Я думаю, ты можешь так поступить.

def done(self, form_list, **kwargs):
    info = self.save_info(form_list[0])
    extra = self.save_extra(info, form_list[1])
    # how to provide context for redirect?
    # return redirect('confirmation.html')
    # this works, but uses POST
    form_list=[form.cleaned_data for form in form_list]

    return HttpResponseRedirect("/url/"+form_list)
person tom joy    schedule 17.09.2012
comment
Спасибо за Ваш ответ. В итоге я просто добавил ключ к сеансу, а затем сделал перенаправление (подтверждение_вью). Затем в confirm_view я мог искать требуемые данные с помощью сеансового ключа. - person mzu; 17.09.2012