2

我创建了一个运行良好的 Django 表单向导。但是,在完成向导并重新启动后,它会加载之前使用期间生成的数据。相反,我希望它清除以前的向导状态并在成功完成后重新开始。我曾尝试修改向导的 done 方法,但它没有解决问题:

def done(self, form_list, **kwargs):
    self.instance_dict = {}
    self.storage.reset()
    return HttpResponseRedirect('/foo/')

为了使向导按我需要的方式工作,我必须进行哪些更改?我的向导扩展了NamedUrlSessionWizardView课程。

4

2 回答 2

2

我不是 100% 确定这是否属实,但我认为以下方法有效:

我在我的向导中保存表单实例,如下所示:

self.instance_dict['foo'] = foo

但出于某种原因

self.instance_dict = {}

没有清除该数据。相反,我开始将对象保存在额外的数据中:

self.storage.extra_data = {'foo' : foo}

然后我def get_form_instance(self, step)在向导的方法中检索它,例如:

def get_form_instance(self, step):
    ...
    if self.steps.current == 'foo' and self.storage.extra_data.has_key('foo'):
        return Bar.objects.filter(foo=self.storage.extra_data['foo'])
    ...

该数据显然已通过上述完成方法成功清除。然而,由于更多的复杂性,最后我放弃了整个表单向导,只使用了一步表单。

于 2012-08-22T10:32:28.230 回答
1

重置表单向导的存储非常容易。我通常在数据处理完成后这样做:

def done(self, form_list, form_dict, **kwargs):
    #do stuff with your form data
    self.instance_dict = None
    self.storage.reset()
    return redirect(reverse_lazy('somewhere'))

或从另一个视图重定向后重置向导

del request.session['wizard_name']
于 2017-01-25T22:01:22.117 回答