我创建了一个可以正常使用的Django表单向导。但是,在完成向导并再次启动它之后,它会加载在之前使用过程中生成的数据。相反,我希望它清除以前的向导状态,并在完成成功后重新开始。我已经尝试修改向导的done方法,但它不能解决问题:
def done(self, form_list, **kwargs):
self.instance_dict = {}
self.storage.reset()
return HttpResponseRedirect('/foo/')
我需要更改什么才能让向导以我需要的方式工作?我的向导扩展了NamedUrlSessionWizardView
类。
答案 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']