import re from odoo import fields, models, api class ResMrpWorkOrder(models.Model): _inherit = 'mrp.workorder' mixed_search_field = fields.Char(string='坯料产品名称/RFID') @api.model def web_read_group(self, domain, fields, groupby, limit=None, offset=0, orderby=False, lazy=True, expand=False, expand_limit=None, expand_orderby=False): domain = domain or [] for index, item in enumerate(domain): if isinstance(item, list): if item[0] == 'mixed_search_field': if self._is_rfid_code(item[2]): domain[index] = ['rfid_code', item[1], item[2]] else: domain[index] = ['product_tmpl_name', item[1], item[2]] return super(ResMrpWorkOrder, self).web_read_group(domain, fields, groupby, limit=limit, offset=offset, orderby=orderby, lazy=lazy, expand=expand, expand_limit=expand_limit, expand_orderby=expand_orderby) def _is_rfid_code(self, tag): """ 判断是否是rfid_code """ # 基于长度判断(假设RFID标签长度为10到16个字符) if not 10 <= len(tag) <= 16: return False # 基于字符集判断(仅包含数字和字母) if not re.match("^[0-9]*$", tag): return False return True