24👍
✅
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
1👍
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
...
- Django: How to get the root path of a site in template?
- Django .aggregate() on .annotate()
- Django form with many-to-many relationship does not save
- Django – MEDIA_ROOT and MEDIA_URL
- Django Rest Framework 3.1 breaks pagination.PaginationSerializer
Source:stackexchange.com