我想創建一個表單,一旦提交,表單的每個下一個表單對於同一個用戶而言,表單將已經填寫上一次的數據用戶提交了它。聽起來像django應該有捷徑 - 是否有它?如果不是,最簡單的方法是什麼?Django:使用cookie保存並恢復表單的狀態
我能想到的最好的方法是挑cleaned_data
並將其保存爲cookie,以後再重新創建表單。
我想創建一個表單,一旦提交,表單的每個下一個表單對於同一個用戶而言,表單將已經填寫上一次的數據用戶提交了它。聽起來像django應該有捷徑 - 是否有它?如果不是,最簡單的方法是什麼?Django:使用cookie保存並恢復表單的狀態
我能想到的最好的方法是挑cleaned_data
並將其保存爲cookie,以後再重新創建表單。
這聽起來像一個很好的計劃。但是,如果使用cookie沒有任何壓力,我會訴諸使用會話。這樣你就不會達到cookie的大小限制,並且傳輸更大尺寸的cookie會減慢響應時間。
form = MyForm(initial=request.session.get('form_data'))
...
if form.is_valid():
request.session['form_data'] = form.cleaned_data
進行了擴展,這一點,這裏是一個辦法,我已經找到了使用會話表單數據與基於類的視圖保存:
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
...
如果您需要再次確認恢復形式出於某種原因,做 `form = MyForm(request.session.get('form_data')`。 使用首字母可以使表單無界,form.is_valid()總是返回False,即使沒有錯誤。綁定到數據以便使用'is_valid()'方法。 – javed 2016-08-09 12:42:31