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

Odoo 8销售报价单行项添加EAN13条码搜索功能咨询

实现销售报价单中通过EAN13条码搜索产品的功能

嘿,我来帮你搞定这个EAN13条码搜索的需求!你的思路完全正确——通过重写product.product模型的name_search方法扩展搜索范围,但代码里有几个小细节需要调整,下面是修正后的完整实现:

修正后的代码

# -*- coding: utf-8 -*-
from openerp import models, api

class ProductProduct(models.Model):
    _inherit = "product.product"

    @api.model
    def name_search(self, name='', args=None, operator='ilike', limit=100):
        # 先调用原方法,保留默认的名称、内部编号搜索逻辑
        res = super(ProductProduct, self).name_search(name=name, args=args, operator=operator, limit=limit)
        
        # 仅在支持模糊/精确匹配的操作符下,添加EAN13条码搜索
        if operator in ('ilike', 'like', '=', '=like', '=ilike'):
            # 合并原有搜索条件与EAN13搜索域
            domain = [('ean13', operator, name)]
            if args:
                domain += args
            # 搜索匹配EAN13的产品
            ean_matched_ids = self.search(domain, limit=limit)
            # 将匹配结果加入原搜索结果
            res += self.name_get(ean_matched_ids)
        
        # 去重:避免同一产品因名称和EAN13同时匹配而重复显示
        res = list(set(res))
        # 按产品名称排序,保持结果整洁
        res.sort(key=lambda x: x[1])
        
        return res

关键调整说明

  • 规范类定义:把product_product改为符合PEP8规范的ProductProduct,同时修正models.model为models.Model(大写M是Odoo的正确类名)
  • 保留原搜索逻辑:调用super时传递原始参数,确保原有的名称、内部编号搜索功能不受影响
  • 合并搜索条件:将原有args过滤条件与EAN13搜索域结合,避免忽略其他业务场景的过滤规则
  • 结果去重处理:通过set去重,防止同一产品多次出现在搜索结果中
  • 适配新API:添加@api.model装饰器,符合Odoo新API的写法,同时兼容旧版本

使用步骤

  1. 将这段代码放到你的自定义Odoo模块的models目录下(比如命名为product_extend.py)
  2. 在模块的__openerp__.py(或__manifest__.py)中声明对product模块的依赖
  3. 安装/升级自定义模块后,回到销售报价单的产品搜索框,输入EAN13条码就能直接匹配到对应产品了!

内容的提问来源于stack exchange,提问作者Dalila Hannouche

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:52:12