web2py自动填充小部件无法正常工作

时间:2016-01-28 16:11:46

标签: autocomplete widget web2py

需要一个关于web2py内置自动完成小部件的提示。

控制器中的

: db.otc_products.counterparty.widget = SQLFORM.widgets.autocomplete(request,db.counterparty.Long_Name,limitby =(0,10),min_length = 2)

模特中的

db.define_table(' otc_products&#39 ;, 现场('交易对手','参考交易对手',           widget = SQLFORM.widgets.autocomplete(request,db.counterparty.Long_Name,id_field = db.counterparty.id,                                                 limitby =(0,20),min_length = 2)), ...

db.define_table('对手&#39 ;,     字段(' LONG_NAME&#39), ...

结果sqlform.grid返回一个网格,该网格将交易对象字段作为常规表字段而不是窗口小部件,更不用说autocompelete窗口小部件。

这里需要修改哪些配置才能显示自动完成小部件并正常工作。

感谢advance! 检查上面的链接以获取tge网格的快照。

2 个答案:

答案 0 :(得分:0)

.widget对象的Field属性生成用于通过SQLFORM创建的表单中的字段的HTML表单输入元素。网格用于显示存储在数据库中的值,而不是用于编辑这些值。因此,网格中给定字段的显示由字段.represent属性确定,而不是由.widget属性确定。

正如您在上面的评论中提到的,您可以在.represent属性中使用表单小部件,然后网格将显示小部件。但是,在上面的模型和控制器代码中,您已设置.widget字段的counterparty属性,而不是.represent属性。

在任何情况下,在网格本身中使用表单小部件都没有意义,因为网格没有提供通过这些小部件对记录进行内联更新的机制(即,您可以在每个小部件中选择/输入值)小部件,但您无法提交更改,因此它们将保留在数据库中。)

理论上,您可以在网格上构建自己的内联编辑功能(通过Javascript读取输入中的值并通过Ajax将更新的记录发布到服务器)。但是这个功能没有内置到网格中。

网格确实提供了编辑单个记录的方法。如果您将网格配置为可编辑,则每一行都将包含一个"编辑"按钮,当您单击它时,您将被带到单独页面上的编辑表单。该编辑表单将使用您定义的任何小部件,包括您在代码中配置的自动完成小部件。

答案 1 :(得分:0)

对于web2py和stackoverflow社区以及完整性,开发人员正在利用此框架并简化Web开发:

可以对sqlform.grid进行二次开发,以便在某些方面扩展其容量,只需要非常熟悉底层的.py文件,这些文件是开源的,可以根据您的需求进行修改。

人们已经发布了类似下面的解决方案,这个可以在线编辑一个网格,它提供了方便的编辑以及sql记录之间的比较,sql表可以通过网格管理,具有更大的透明度而无需来回跳转编辑:

http://www.web2pyslices.com/slice/show/1928/basic-inline-editing-in-sqlformgrid-no-plugin-no-javascript

p.s。:我正在利用web2py来加速金融公司的开发,所以我真的没时间扩展这个框架来解除其他功能,例如上面的功能。当我有空闲时间时,如果有实际的开发需求,我会根据特定要求扩展web2py,并在网上发布代码。