【问题标题】:Retain edit data for one form when submitting a second提交第二个表单时保留一个表单的编辑数据
【发布时间】:2017-05-09 06:03:48
【问题描述】:

我有一个页面,我想这样做:首先,用户只看到一个表单,例如,假设它允许用户选择产品类型。提交此表单后,第二个表单(其内容取决于产品类型)出现在其下方。然后,用户可以填写第二个表单并提交,或者修改并重新提交第一个表单 - 无论哪种方式,我都希望第一个表单保持用户的输入(在本例中为产品类型),即使第二个表单是已提交。

我怎样才能在 django 中干净地做到这一点?我正在努力以第一种形式保存数据:例如如果用户提交第二个表单并且它有验证错误,当页面显示第一个表单时,产品类型将呈现为空白,但我希望该选项保持设置为用户选择的内容。这种行为并不神秘或意外,但不是我想要的。另外,如果用户成功提交了第二个表单,我想重定向以便第一个表单保持选择并清除第二个表单。

我想到的最好的方法是将 URL 与第一个表单的字段(诚然没有太多参数)混合并在那里存储它的状态,或者将两种表单组合成一个 HTML 表单对象并基于不同的响应在提交按钮的名称上(尽管我不知道如何使用重定向来清除第二个表单并在我这样做时保留第一个表单)。有没有我想念的更清洁、更明显的方法?谢谢。

【问题讨论】:

  • 我建议开始使用 Ajax。

标签: python django forms


【解决方案1】:

1)您应该开始使用 ajax 表单处理,正如评论中提到的那个人。因为使用常规页面处理多个表单很痛苦。

2) 如果您希望它在没有 ajax 的情况下工作,您应该创建 3 个在单个页面上呈现的表单。但是第二个 2 被隐藏,直到第一个没有错误并且实际填充了一些东西。像这样:

<form2 style="display:
{% if not form1.errors and form1.field1 %}
block
{% else %}
none
{% endif %}
;"</form2>

【讨论】:

    【解决方案2】:

    您可以将第一个表单值存储在会话中,并在您呈现第二个表单时将它们作为第一个表单的初始数据提供。
    例如:data={"f1":request.session['abc'],"f2":request.session["xyz"]}
    form1 = abc(initial=data)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-10
      • 2018-08-25
      • 2011-07-06
      • 1970-01-01
      • 2015-08-24
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多