Django: сохранение и восстановление состояния формы с помощью файла cookie - PullRequest
13 голосов
/ 11 февраля 2011

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

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

Ответы [ 2 ]

21 голосов
/ 11 февраля 2011

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

form = MyForm(initial=request.session.get('form_data'))
...
if form.is_valid():
    request.session['form_data'] = form.cleaned_data
1 голос
/ 16 июля 2013

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

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
        ...
...