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

标签 django django-forms django-formwizard

我创建了一个 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/

相关文章:

Django Fabric 同步数据库

python - Django 表单向导调度程序

django - 将自定义 html 添加到 django 中的选择字段标签

Django 表单 request.user

django admin - 覆盖单项模型的更改 ListView

django 向导,在同一步骤中使用表单和表单集

python - Django 按时间过滤日期时间字段,不考虑日期

python - 从 Django 中的 FilteredSelectMultiple 小部件获取所选值

django - django 模板中的 for 循环 - 列表对象没有属性 'get'

django - 带有复选框的表单中的manytomany字段在django模板中安装了选择字段