Django: Save and restore a form's state using a cookie

前端 未结 2 491
忘了有多久
忘了有多久 2021-02-05 15:58

I want to make a form that once submitted, on each next rendering of the form for the same user, the form will be already filled out with the data from the last time the user su

相关标签:
2条回答
  • 2021-02-05 16:28

    This already sounds like a good plan. But if there is no pressure on using cookies, I would resort to using the session instead. That way you won't hit a size limit on cookies, and transmitting cookies with higher size can slow down your response time.

    form = MyForm(initial=request.session.get('form_data'))
    ...
    if form.is_valid():
        request.session['form_data'] = form.cleaned_data
    
    0 讨论(0)
  • 2021-02-05 16:40

    As an extension to this, here is a way I have found to use sessions to save the form data with a class-based view:

    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
            ...
    
    0 讨论(0)
提交回复
热议问题