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

Odoo 15 销售订单行产品条形码搜索实现不区分大小写

Odoo 15 销售订单行条形码不区分大小写搜索实现方案

直接上两种可行的实现方式,选一种适配你的需求就行:

方式一:修改产品条形码字段的搜索逻辑

继承product.product模型,给条形码字段指定自定义搜索方法,强制用不区分大小写的匹配规则:

from odoo import models, fields

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

    barcode = fields.Char(
        string='Barcode',
        index=True,
        search='_search_barcode_case_insensitive'
    )

    def _search_barcode_case_insensitive(self, operator, value):
        # 把大小写敏感的操作符转成不敏感的
        if operator in ('like', '=like'):
            operator = 'ilike'
        elif operator in ('not like', 'not =like'):
            operator = 'not ilike'
        # 精确匹配也改成模糊不区分大小写
        elif operator == '=':
            operator = 'ilike'
            value = f'%{value}%'
        return [('barcode', operator, value)]

方式二:只修改销售订单行的产品搜索域

如果不想改动全局产品模型的搜索逻辑,就单独在销售订单行里调整:

from odoo import models

class SaleOrderLine(models.Model):
    _inherit = 'sale.order.line'

    def _domain_product_id(self):
        domain = super()._domain_product_id()
        # 拿到当前搜索的条形码关键词
        search_val = self.env.context.get('search_default_barcode')
        if search_val:
            # 替换原有的大小写敏感条件为ilike
            updated_domain = []
            for cond in domain:
                if cond[0] == 'barcode' and cond[1] in ('=', 'like'):
                    updated_domain.append(('barcode', 'ilike', search_val))
                else:
                    updated_domain.append(cond)
            domain = updated_domain
        return domain

部署说明

把代码放到自定义模块的models文件夹下,升级模块就能生效。测试时输入a11,就能同时搜到A11和a112的产品,实现不区分大小写的模糊搜索。

内容的提问来源于stack exchange,提问作者Talented Developer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:00:57