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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:51:03