Django表单向导,如何重置/清除向导?

时间:2012-08-13 11:00:21

标签: django django-forms django-formwizard

我创建了一个可以正常使用的Django表单向导。但是,在完成向导并再次启动它之后,它会加载在之前使用过程中生成的数据。相反,我希望它清除以前的向导状态,并在完成成功后重新开始。我已经尝试修改向导的done方法,但它不能解决问题:

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

我需要更改什么才能让向导以我需要的方式工作?我的向导扩展了NamedUrlSessionWizardView类。

2 个答案:

答案 0 :(得分: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'])
    ...

使用上述完成方法显然已成功清除了该数据。然而,最后我放弃了整个表单向导的东西,因为更多的复杂性,只是采用一步式的形式。

答案 1 :(得分:0)

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

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']