You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

激活排序后SQLFORM.grid搜索出现AttributeError错误的原因排查

SQLFORM.grid开启高级搜索后,排序状态下搜索触发AttributeError的问题确认

这是web2py框架的已知bug,并非你的操作有误。

问题现象

激活排序功能后,使用开启advanced_search=True的SQLFORM.grid进行搜索时,会触发AttributeError错误。

重现步骤

  • 创建开启advanced_search=True的SQLFORM.grid实例
  • 点击表格列头启用排序功能
  • 点击「搜索」按钮(可输入或不输入关键词)
  • 触发错误,报错栈如下:
Traceback (most recent call last):
File "C:\Users\User\Desktop\web2py\gluon\restricted.py", line 219, in restricted exec(ccode, environment)
  File "C:/Users/User/Desktop/web2py/applications/bsmOnline/controllers/library.py", line 113, in <module>
  File "C:\Users\User\Desktop\web2py\gluon\globals.py", line 430, in <lambda>
    self._caller = lambda f: f()
  File "C:/Users/User/Desktop/web2py/applications/bsmOnline/controllers/library.py", line 56, in region
    create=can_add_library, editable=can_edit_library, deletable=can_delete_library)
  File "C:\Users\User\Desktop\web2py\gluon\tools.py", line 3951, in f
    return action(*a, **b)
  File "C:/Users/User/Desktop/web2py/applications/bsmOnline/models/db1.py", line 78, in library
    grid = SQLFORM.grid(query, maxtextlength=80, csv=False, **kwargs)
  File "C:\Users\User\Desktop\web2py\gluon\sqlhtml.py", line 2804, in grid
    otablename, ofieldname = order.split('~')[-1].split('.', 1)
    AttributeError: 'list' object has no attribute 'split'

问题根源

点击搜索按钮后,request.vars中的order参数会从字符串类型变为列表类型(例如从order='anykey'变为order=['anykey', 'anykey']),而框架代码中直接对order调用split()方法,未处理其为列表的情况,因此触发错误。

临时修复方案

在创建SQLFORM.grid之前,手动修正request.vars.order的类型:

if request.vars and 'order' in request.vars:
    # 取列表第一个元素,恢复为字符串类型
    request.vars.order = request.vars.order[0]

内容的提问来源于stack exchange,提问作者JeffP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 15:42:23