【问题标题】:How to have additional fields in SQLFORM that are not in table in web2py?如何在 SQLFORM 中有不在 web2py 表中的附加字段?
【发布时间】:2013-10-28 18:52:40
【问题描述】:

我有一个用于在使用 SQLFORM 生成的表中创建新记录的表单。表格的其中一个字段不会直接向用户公开,而是根据其他一些本身不属于表格的输入元素的值创建。

如何向 SQLFORM 中添加不属于表且不需要作为数据库插入的一部分的附加字段?在插入数据库之前计算非公开字段的位置在哪里?

(一个假设的例子是表中有纬度和经度坐标字段,但没有地址字段。在这个例子中,需要在创建表单上的地址字段,可用于对纬度/经度字段中的坐标进行地理编码和存储)

【问题讨论】:

    标签: forms web2py


    【解决方案1】:

    我解决这个问题的方法是使用SQLFORM.factory 而不是SQLFORM。

    1。我提取了表中定义的字段

    fields = [field for field in db.customer]
    

    2。附加了我想要的新字段

    fields += [
        Field('customer_type','string', label=T('Customer Type'),
             requires=IS_IN_SET(customer_types, zero=None, sort=False)),
        Field('another_field','string', label=T('Another Field')),
        ]
    

    3。使用 SQLFORM.factory 生成表单

    form = SQLFORM.factory(
        *fields,
        formstyle='bootstrap',
        _class='customer form-horizontal',
        table_name='customer'
        )
    

    *注意fields之前的星号是必要的

    4。仍然使用form.process().accepted,但随后计算出我需要的内容,然后手动处理数据库插入

    if form.process().accepted:
        ...
        form.vars.some_nonwritable_field = calculate_complicated_value()
        db.customer.insert(**db.customer._filter_fields(form.vars))
        ...
    

    _filter_fields 防止动态添加的字段成为插入的一部分。

    这样我可以在表单中添加经过验证但不属于插入内容的附加字段。

    【讨论】:

      【解决方案2】:

      在 web2py 的最新版本中,您可以缩短它:

      form = SQLFORM.factory(
          db.table,
      
          Field('my_field_1'),
          Field('my_field_2'),
      )
      

      【讨论】:

        猜你喜欢
        • 2016-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多