Django表单向导的备份与恢复

4 投票
1 回答
521 浏览
提问于 2025-04-18 12:38

我遇到了一个小问题,就是不太明白如何在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秒发送一次)。

撰写回答