如何在Odoo中实现不区分大小写的字母顺序排序?
实现不区分大小写排序的解决方案
以下方案适用于Odoo框架的tree/kanban视图排序需求:
方案1:全局生效(修改模型排序规则)
直接在对应模型的定义中调整_order属性,调用数据库内置的小写转换函数处理排序字段即可:
class CustomModel(models.Model): _name = 'custom.model' # 先按name的小写值排序,再按原name排序保证相同语义的字符串顺序稳定 _order = 'lower(name), name'
修改后所有该模型的默认查询、列表/看板视图排序都会自动遵循不区分大小写的规则。
方案2:局部生效(仅指定视图使用)
如果不需要全局修改排序逻辑,可以单独调整对应视图的配置:
- 方式一:修改绑定视图的窗口动作的
order参数
<record id="your_module.custom_model_action" model="ir.actions.act_window"> <field name="name">自定义模型视图</field> <field name="res_model">custom.model</field> <field name="view_mode">tree,kanban,form</field> <field name="order">lower(name), name</field> </record>
- 方式二:直接在视图根节点添加
default_order属性
<tree string="列表视图" default_order="lower(name), name"> <!-- 视图字段定义 --> </tree> <kanban string="看板视图" default_order="lower(name), name"> <!-- 看板卡片定义 --> </kanban>
ORM调用说明
Odoo原生ORM的search方法直接支持在order参数中传入数据库函数表达式,不需要额外调用特殊方法:
# 示例查询:按name不区分大小写排序返回所有记录 records = self.env['custom.model'].search([], order='lower(name), name')
注意:以上写法适配Odoo默认的PostgreSQL数据库,lower()为PostgreSQL内置的小写转换函数,如果你使用其他数据库请替换为对应数据库的同功能函数即可。
内容的提问来源于stack exchange,提问作者Satya Dev Yadav
相关产品推荐
相关产品推荐

