【问题标题】:How to dynamically change variable name in form.vars.var_name如何动态更改 form.vars.var_name 中的变量名
【发布时间】:2015-12-16 14:32:03
【问题描述】:

我已经在控制器中定义了计数器变量。

我可以动态定义表格和字段。

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'步骤?

【问题讨论】:

  • 意见:使用 mongodb 离开表!

标签: python forms web2py


【解决方案1】:
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))

另外,如果您不使用动态生成的表在数据库中存储数据,请务必在表定义中设置migrate=False——否则,DAL 将实际在数据库中创建这些表中的每一个。

【讨论】:

    猜你喜欢
    • 2016-08-31
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    相关资源
    最近更新 更多