如何继承Odoo JavaScript搜索框添加=ilike运算符(适配13及以上版本)
Odoo 13+ 给字符搜索新增=ilike匹配运算符实现方案
问题原因
直接继承修改全文件不生效的核心原因是Odoo 13对前端JS组件的扩展机制做了重构,原Odoo12版本的直接复写全文件的方式不再适配,且容易和其他同组件的扩展逻辑冲突。
实现步骤
1. 配置模块资源依赖
首先在你的自定义模块的__manifest__.py中,声明对web模块的依赖,同时将自定义JS文件注入到后端资源包中:
{ 'name': 'Advanced Search Wildcard', 'version': '13.0.1.0.0', 'depends': ['web'], 'assets': { 'web.assets_backend': [ '你的模块名/static/src/js/search_filters_extend.js', ], }, 'installable': True, 'auto_install': False, }
2. 编写JS增量补丁
新建你的模块名/static/src/js/search_filters_extend.js文件,采用Odoo标准的include补丁方式扩展原有Char搜索类,无需复写全量代码,仅增量新增运算符:
odoo.define('你的模块名.search_filters_extend', function (require) { "use strict"; const searchFilters = require('web.view.search_filters'); const _lt = require('web.core')._lt; searchFilters.Char.include({ init: function () { this._super(...arguments); // 新增=ilike匹配运算符 this.operators.push({ value: '=ilike', text: _lt("matches") }); // 如果需要调整运算符排序,可以直接重写operators数组 // this.operators = [ // ...原有运算符配置, // {value: '=ilike', text: _lt("matches")} // ] } }); });
注意不要用
extend创建子类的方式扩展,这种方式不会替换全局注册的原有Char类,只有用include打补丁的方式才能修改全局生效的原类逻辑
3. 验证生效
- 升级你的自定义模块
- 清空浏览器缓存并重新加载Odoo后台
- 进入任意字符字段的筛选界面,即可看到新增的
matches选项,支持通配符%、_的模糊匹配
注意事项
- Odoo ORM原生支持
=ilike运算符,无需额外修改后端搜索逻辑 - 如果存在其他模块也修改了字符搜索的运算符,只需将你的模块依赖对应的修改模块,即可保证扩展逻辑不被覆盖
内容的提问来源于stack exchange,提问作者The Agri CULTURE Guy
相关产品推荐
相关产品推荐

