【问题标题】:Django SessionWizardView jumps back to the first step after page is reloadedDjango SessionWizardView 页面重新加载后跳回第一步
【发布时间】:2012-09-22 12:55:10
【问题描述】:

我正在使用 SessionWizardView 管理两个表单。例如,当我在最后一步重新加载页面时,我又回到了第一步,必须再次输入所有字段。

这是预期的行为吗?如果是这样,是否有可能回到我重新加载页面之前的步骤?当然,所有字段都应相应填写。

class ManufacturingCalculatorWizard(SessionWizardView):
  def get_template_names(self):
    TEMPLATES = {
        "blueprint": "manufacturing/forms/select_blueprint.haml",
        "calculator": "manufacturing/forms/calculator.haml"
    }

    return [TEMPLATES[self.steps.current]]

  def done(self, form_list, **kwargs):
    form_data = [form.cleaned_data for form in form_list]
    rcontext = RequestContext(self.request, { 'data' : calculate_manufacturing_job(form_data) })
    return render_to_response('manufacturing/forms/result.haml', rcontext)

【问题讨论】:

  • reload的时候,你也发布数据吗?
  • 浏览器询问我是否要重新发送表单。是的,看来我又要发送帖子数据了。
  • 我在我的代码中看不到这种行为。您可能想发布向导视图代码、模板代码。
  • @Rohan 我添加了向导的代码。
  • 我有一个怀疑。这是done 方法。我有三个步骤。第一步=表单,第二步=表单,第三步是done方法返回的结果页面。重新加载第一步和第二步有效,但重新加载结果页面出错。所以FormWizardView 本身正在工作。现在的问题是:如何重新加载结果页面并基本触发done方法?

标签: django django-forms django-formwizard


【解决方案1】:

done 方法之后呈现的页面不是向导的一部分,因此当您重新加载它时,django 将尝试重定向到第一页作为向导的新会话。

如果您想将最后一步添加为预览和确认页面之类的内容,您可以使用虚拟表单添加新步骤并使用模板显示适当的数据。要从之前的步骤中获取数据,您可以使用get_context_data 视图方法,使用之前表单的清理数据构建上下文。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 2011-07-07
    • 2020-03-31
    • 1970-01-01
    相关资源
    最近更新 更多