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