Django表单向导的备份与恢复
我遇到了一个小问题,就是不太明白如何在Django的贡献库中给表单向导模块添加备份和恢复的功能。
我尝试创建一个存储类,用数据库来保存当前状态,而不是使用cookie或会话,但这并没有解决我的问题。因为当表单初始化时,所有旧的数据都会被清空,这在cookie存储和会话存储中都是一样的(而我的是模仿cookie的,但保存到数据库中)。
我需要解决的问题是,如果用户在第x步离开了表单(比如说停电了),然后再次登录并重新开始向导,用户必须能够继续填写,直到完成或者点击“取消”(这个功能还没有实现)。
1 个回答
1
你可以在视图中像这样重写post方法:
class YourWizardView(SessionWizardView):
def post(self, *args, **kwargs):
form = self.get_form(
data=self.request.POST, files=self.request.FILES)
data = self.get_all_cleaned_data()
form.is_valid() # to generate cleaned data
data.update(form.cleaned_data)
#Save your data HERE
return super(YourWizardView, self).post(*args, **kwargs)
def get_form_instance(self, step):
# Getting obj instance values
obj = None
if 'pk' in self.kwargs:
obj = get_object_or_404(
YourModel, pk=self.kwargs['pk'])
return self.instance_dict.get(step, obj)
如果你希望用户能够返回查看数据,而不需要点击下一步,你可以使用一些JavaScript通过ajax定期发送数据(比如每5秒发送一次)。