1

我正在使用 web2py 框架,我正在尝试创建一个没有提交按钮的 SQLFORM。我有多个表单,具有共同的字段,因此我不能使用 SQLFORM.factory(),并且我希望只有一个表单带有提交按钮,该按钮将处理来自页面上所有其他表单的数据。关于最好的方法有什么建议吗?

4

3 回答 3

2
form1 = SQLFORM(db.table1, buttons=[])

这将设置没有任何按钮的表单一,所以也没有提交。

于 2014-07-09T11:38:28.540 回答
1

我想一种方法可能是将所有表单的 _formkey 和 _formname 字段设置为相同的值。像这样的东西:

my_form2.formname = my_form1.formname
my_form2.formkey = my_form1.formkey

如果您想手动隐藏提交按钮,请尝试以下操作:

my_form1.element('input', _type = 'submit')['_style'] = 'display:none'

将其中一个 formname 和 formkey 设置为等于其他表单的值的提交按钮保持不变 - 此按钮将用于提交表单。

将 vars 插入 db 表可以执行以下操作:

db.table1.insert(**db.table1._filter_fields(request.vars))
db.table2.insert(**db.table2._filter_fields(request.vars))

如果字段具有相同的名称,可能会有一些麻烦,所以要小心。

于 2013-08-05T23:17:56.433 回答
0

我认为您可以将不同的 SQLFORM 组合起来,将一种形式附加到另一种形式上。因此,只有一个提交按钮,您将只获得一个“多重表单”。在你的控制器中类似的东西:

form1 = SQLFORM(db.table1)
form2 = SQLFORM(db.table2)

form1.append(form2)
if form1.process().accepted:
   #filter the fields from each form do whatever you want
   response.flash = 'OK'
elif form1.errors:
   response.flash = 'NOT OK'

return dict(form=form1)  

你看到我刚才问form1了吗?这是因为他是主要表格,当然,您在表格中进行了正确的过滤。希望这可以帮助。

于 2013-07-29T16:53:41.933 回答