web2py的SQLFORM.grid的查询字段优化控制

web2py的SQLFORM.grid自带的查询功能非常丰富好用,能实现各种组合,可在grid的参数,searchable=True打开。

 但是grid提供查询的字段不是我们在fields参数中设置的字段,而且顺序也不跟grid中Fields一致,这是因为grid的查询字段的控制和展现顺序默认使用的是构建表时字段属性,例如:

db.define_table('employeeInfo',
                Field('EmployeeName'),
                Field('EmployeeAge',searchable=False)),

特别是在使用到grid使用到多张表连接联查时,会把所用表的各种字段都放在这里下拉,很是不友好,而且默认还要多一个我们展现中看不到的id字段我们希望在grid设置了什么字段,什么顺序,那查询组建中提供下拉查询的就是什么字段和顺序:

优化改造的方法很简单,找到gluon文件下的sqlhtml.py文件,找到这么一行:

if searchable:
    sfields = reduce(lambda a, b: a + b,
                     [[f for f in t if f.readable and f.searchable] for t in tables])

直接改为:

if searchable:
    grid_fields_len=len(fields)
    sfields=[]
    #优化了查询字段,fields的最后一个始终是id字段,这个循环是为了把虚拟字段去掉,虚拟字段是无法查询的,发在这里会出错,最后一个id字段不要
    for i in range(0,grid_fields_len-1):
       if type(fields[i]) == type(fields[grid_fields_len-1]):
          sfields.append(fields[i])
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值