如何在 form.vars.var_name 中动态更改变量名称
How to dynamically change variable name in form.vars.var_name
我已经在控制器中定义了计数器变量。
我可以动态定义表和字段。
tables = [db.define_table('example_table_%s' % x,
Field('example_field_%s' % x, type='string', ...)
...
)
for x in range(0, counter+1)]
我可以将定义的表添加到 SQLFORM。
form = SQLFORM.factory(
db.table_1,
db.table_2,
*tables,
submit_button='Submit')
如果计数器值为“2”,我可以手动控制过程。
if form.process.accepted():
id = db.table_1.insert(**db.table_1._filter_fields(form.vars))
form.vars.table_1_field = id
id = db.table_2.insert(**db.table_2._filter_fields(form.vars))
#'0'
form.vars.table_2_field = form.vars.example_field_0
id = db.table_2.insert(**db.table_2._filter_fields(form.vars))
#'1'
form.vars.table_2_field = form.vars.example_field_1
id = db.table_2.insert(**db.table_2._filter_fields(form.vars))
#'2'
form.vars.table_2_field = form.vars.example_field_2
id = db.table_2.insert(**db.table_2._filter_fields(form.vars))
以上代码适用于我的应用程序。
如何动态执行 #'0'、#'1' 和 #'2' 步骤?
for i in range(0, counter + 1):
form.vars.table_2_field = form.vars['example_field_%s' % i]
db.table_2.insert(**db.table_2._filter_fields(form.vars))
此外,如果您不使用动态生成的 table 将数据存储在数据库中,请务必在 table 定义中设置 migrate=False
-- 否则, DAL 实际上会在数据库中创建每个 table。
我已经在控制器中定义了计数器变量。
我可以动态定义表和字段。
tables = [db.define_table('example_table_%s' % x,
Field('example_field_%s' % x, type='string', ...)
...
)
for x in range(0, counter+1)]
我可以将定义的表添加到 SQLFORM。
form = SQLFORM.factory(
db.table_1,
db.table_2,
*tables,
submit_button='Submit')
如果计数器值为“2”,我可以手动控制过程。
if form.process.accepted():
id = db.table_1.insert(**db.table_1._filter_fields(form.vars))
form.vars.table_1_field = id
id = db.table_2.insert(**db.table_2._filter_fields(form.vars))
#'0'
form.vars.table_2_field = form.vars.example_field_0
id = db.table_2.insert(**db.table_2._filter_fields(form.vars))
#'1'
form.vars.table_2_field = form.vars.example_field_1
id = db.table_2.insert(**db.table_2._filter_fields(form.vars))
#'2'
form.vars.table_2_field = form.vars.example_field_2
id = db.table_2.insert(**db.table_2._filter_fields(form.vars))
以上代码适用于我的应用程序。
如何动态执行 #'0'、#'1' 和 #'2' 步骤?
for i in range(0, counter + 1):
form.vars.table_2_field = form.vars['example_field_%s' % i]
db.table_2.insert(**db.table_2._filter_fields(form.vars))
此外,如果您不使用动态生成的 table 将数据存储在数据库中,请务必在 table 定义中设置 migrate=False
-- 否则, DAL 实际上会在数据库中创建每个 table。