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
相关产品推荐
相关产品推荐

