如何允许在 web2py 中提交多个表单?

How to allow multiple form submissions in web2py?

谢天谢地,web2py 使用隐藏的 _formkey 值自动防止提交多个表单。在大多数情况下,当提交表单时,页面会再次加载,因此会生成一个新键。但是,由于我是使用 web2py 的 ajax 函数提交我的表单,所以我在没有刷新页面的情况下得到了结果,因此表单密钥保持不变,以后的提交是不可能的。

我应该如何处理这种情况?

您可以考虑为表单创建一个单独的操作并通过 Ajax 组件将整个表单加载到页面中:

def index():
    form_component = LOAD('default', 'form.load', ajax=True)
    return dict(form_component=form_component)

def form():
    form = FORM(...).process()
    return dict(form=form)

在 index.html 视图中,您将通过 {{=form_component}} 包含组件,而在 form.load 视图中,您将通过 {{=form}} 包含表单本身(请注意,form.load 视图不应扩展布局,因为它最终将通过 Ajax).

插入到 index.html 页面中

现在整个表单将通过 Ajax 加载,并通过 Ajax 自动提交,新表单也通过 Ajax return 编辑(所以你根本不需要写任何Javascript代码。

或者,如果您想坚持当前的方法,您可以让控制器 return 整个表单响应 Ajax 请求,并设置 ajax() 函数添加到包含表单的 div 的 ID。在这种情况下,在 Ajax 请求完成后,整个表单将被替换为一个新表单(它将有一个新的 _formkey)。