Django:使用cookie保存并恢复表单的状态

时间:2011-02-11 13:18:54

标签: django forms cookies state restore

我想制作一个表单,一旦提交,在每次下一次呈现同一用户的表单时,表单将填写上次用户提交表单时的数据。听起来像django应该有捷径的东西 - 它有吗?如果不是最简单的方法呢?

我能想到的最好的选择是cleaned_data并将其保存为cookie,稍后再从中重新创建表单。

2 个答案:

答案 0 :(得分:21)

这听起来像个好计划。但如果没有使用cookie的压力,我会采用会话。这样你就不会达到cookie的大小限制,而传输更大的cookie会减慢你的响应时间。

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

答案 1 :(得分:1)

作为对此的扩展,我发现这是一种使用会话以基于类的视图保存表单数据的方法:

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
        ...
相关问题