我想制作一个表单,一旦提交,在每次下一次呈现同一用户的表单时,表单将填写上次用户提交表单时的数据。听起来像django应该有捷径的东西 - 它有吗?如果不是最简单的方法呢?
我能想到的最好的选择是cleaned_data
并将其保存为cookie,稍后再从中重新创建表单。
答案 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
...