为何搜索视图仅显示160条数据?技术解决方案咨询
解决Odoo客户主数据搜索弹窗数量限制问题
嘿,你已经精准定位到问题核心了——dataset.name_search()里硬写的160这个参数,就是限制搜索结果最大展示条数的关键。下面给你几个不同场景下的解决方案,从快速临时修复到生产环境的优雅实现都有:
1. 快速临时修改(仅用于测试/临时需求,不推荐生产)
如果只是临时需要突破这个限制,或者做个测试验证,直接改硬编码值最快:
- 打开文件
addons/web/static/src/js/views/form_common.js - 找到这段代码:
dataset.name_search(search_val, self.build_domain(), 'ilike', 160).done(function(_data) { self._search_create_popup("search", _data); }) - 把
160换成你想要的数值(比如1000),或者直接设为false取消数量限制(不过这里要注意,数据量太大的话会拖慢页面,甚至崩浏览器,谨慎用)
但要提醒你,这种直接改核心代码的方式,一旦Odoo升级或者模块更新,你的修改就会被覆盖,生产环境绝对别这么搞。
2. 自定义模块继承修改(生产环境推荐)
更靠谱的方式是用自定义模块继承修改,完全不碰核心代码,升级也不怕:
- 先建一个自定义模块,在模块的
static/js目录下新建个JS文件,比如叫custom_search_limit.js - 在文件里继承原视图的逻辑,重写对应的方法:
odoo.define('your_custom_module.custom_search_limit', function(require) { "use strict"; var FormCommon = require('web.form_common'); FormCommon.AbstractField.include({ _search: function(search_val) { var self = this; // 这里把160改成你需要的数值,比如500 dataset.name_search(search_val, self.build_domain(), 'ilike', 500).done(function(_data) { self._search_create_popup("search", _data); }); }, }); return FormCommon; }); - 然后在模块的
__manifest__.py里把这个JS文件加到后端资源里:'assets': { 'web.assets_backend': [ 'your_custom_module/static/js/custom_search_limit.js', ], }, - 最后安装并启用这个自定义模块就行,以后Odoo升级也不会影响你的修改。
3. 配置化控制(灵活可调,适合多环境)
要是你希望这个限制条数能随时调整,不用改代码,那就把参数改成从系统配置读取:
- 先去Odoo的「设置」→「技术」→「系统参数」里新增一个参数,比如
web.search_popup_max_limit,默认值设成500 - 然后修改自定义模块的JS代码,读取这个系统参数:
odoo.define('your_custom_module.custom_search_limit', function(require) { "use strict"; var FormCommon = require('web.form_common'); var session = require('web.session'); FormCommon.AbstractField.include({ _search: function(search_val) { var self = this; // 调用RPC读取系统参数 session.rpc('/web/session/get_session_parameter', {key: 'web.search_popup_max_limit'}) .then(function(limit_val) { // 如果参数没设置,默认用500 var search_limit = limit_val ? parseInt(limit_val) : 500; dataset.name_search(search_val, self.build_domain(), 'ilike', search_limit).done(function(_data) { self._search_create_popup("search", _data); }); }); }, }); return FormCommon; });
这样以后你只要改系统参数的值,就能调整搜索弹窗的最大展示条数,完全不用碰代码,特别灵活。
几个要注意的点
- 性能优先:别随便把限制设成
false取消限制,数据量几万条的话,浏览器加载会巨慢,甚至直接崩掉,根据实际业务场景设个合理的上限就好 - 避免冲突:如果有其他自定义模块也重写了这个
_search方法,要注意继承顺序,避免逻辑冲突 - 版本兼容:不同版本的Odoo,对应的JS文件路径或者方法名可能有点不一样,要是你用的不是Odoo 10/11这类版本,得自己核对下代码结构
内容的提问来源于stack exchange,提问作者HVH
相关产品推荐
相关产品推荐

