如何将通用关键字参数和值传递给web2py

时间:2015-05-20 14:54:27

标签: python web2py

我的应用程序是通过ajax(onblur)将一个表单元素的微小信息提交给控制器my_function

request.vars <Storage {'my_field': 'the submitted data'}>

我了解如果db.table(id).update_record(the_field = 'text')是表格中的字段,则可以使用the_field更新记录。

但我尝试将field_name和数据传递给update_record()函数:

def my_function():
    keys = request.vars.keys()
    field_name = keys[0]                     # -> The field name to be updated
    content_id = int(request.args(0))        # -> The record id to be updated
    db.my_table(content_id).update_record(field_name = request.vars[field_name])

哪个无效:SyntaxError: No fields to update。如果我对field_name进行硬编码, 就会正常工作。有什么我想念的吗?

2 个答案:

答案 0 :(得分:1)

您可以使用Python的关键字参数解包语法(即将参数作为字典传递,将解压缩为关键字参数及其值):

db.my_table(content_id).update_record(**{field_name: request.vars[field_name]})

实际上,该表有一个_filter_fields方法,它接受类似字典的对象并将其过滤到仅属于表中的字段(id字段除外)。因此,如果有可能要更新多个字段,您可以执行以下操作:

db.my_table(content_id).update_record(**db.my_table._filter_fields(request.vars))

答案 1 :(得分:0)

我遇到过类似的问题,任何时候我需要将一个数组元素放入一个SQL语句中,只有在我首先将它转换为字符串时它才会起作用。

field_name = str(key[0])