Django: сохранение и восстановление состояния формы с помощью файла cookie

Я хочу сделать форму, которая была отправлена ​​при каждом следующем рендеринге формы для того же пользователя, форма будет уже заполнена данными с момента последнего отправления пользователем. звучит как что-то, что django должно иметь ярлык для - есть ли у него это? если бы не самый простой способ сделать это?

Лучшее, что я мог придумать, это pickeling cleaned_data и сохранение его как файла cookie, позже воссоздающего форму.

Ответы

Ответ 1

Это уже звучит неплохо. Но если нет никакого давления на использование файлов cookie, я бы прибегнул к использованию сеанса. Таким образом, вы не нажмете ограничение на количество файлов cookie, а передача файлов cookie с более высоким размером может замедлить время отклика.

form = MyForm(initial=request.session.get('form_data'))
...
if form.is_valid():
    request.session['form_data'] = form.cleaned_data

Ответ 2

В качестве дополнения к этому, я нашел способ использования сеансов для сохранения данных формы с помощью представления на основе класса:

from django.views.generic.edit import FormView

class MyFormView(FormView):
    template_name = 'myform.html'
    form_class = MyForm
    success_url = '/success/'

    def get_form_kwargs(self):
        """
        The FormMixin uses this to populate the data from the POST request.
        Here, first try to populate it from the session data, if any;
        if there is POST data, it should override the session data.
        """
        kwargs = {'data': self.request.session.get('form_data', None)}
        kwargs.update(super(MyFormView, self).get_form_kwargs())
        return kwargs

    def form_valid(self, form):
        ...
        # save the form data to the session so it comes up as default next time
        self.request.session['form_data'] = form.cleaned_data
        ...