我创建了一个 Django 表单向导,它工作得很好。但是,完成向导并再次启动后,它会加载上次使用期间生成的数据。相反,我希望它清除之前的向导状态,并在成功完成后重新开始。我尝试修改向导的完成方法,但它没有成功:
def done(self, form_list, **kwargs):
self.instance_dict = {}
self.storage.reset()
return HttpResponseRedirect('/foo/')
我需要更改哪些内容才能使向导按我需要的方式工作?我的向导扩展了 NamedUrlSessionWizardView
类。
最佳答案
我不能 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'])
...
该数据显然已通过上述完成方法成功清除。然而,最终由于更多的复杂性,我放弃了整个表单向导的事情,只使用了一步表单。
关于Django 表单向导,如何重置/清除向导?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11932984/