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

为何搜索视图仅显示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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:44:30