import logging from odoo import api, fields, models from odoo.addons.web.models.models import Base from odoo.osv.expression import AND _logger = logging.getLogger(__name__) class IrModelFields(models.Model): _inherit = 'ir.model.fields' @api.model def _is_manual_name(self, name): return name.startswith('x_') or name.endswith('_pinyin') class UsersHomeBatchWizard(models.TransientModel): _name = "users.home.batch.wizard" _description = "Batch Update User Home" user_ids = fields.Many2many("res.users", string="选中员工", default=lambda self: self.env.context.get("active_ids", [])) action_id = fields.Many2one('ir.actions.actions', string="动作") def confirm(self): for user in self.user_ids: user.write({'action_id': self.action_id.id}) class InheritBase(models.AbstractModel): _inherit = 'base' @api.model def web_search_read(self, domain, specification, offset=0, limit=None, order=None, count_limit=None): if default_order := self._context.get('default_order'): new_order = default_order try: res = super().web_search_read(domain, specification, offset, limit, new_order, count_limit) return res except Exception as e: _logger.warning(e) return super().web_search_read(domain, specification, offset, limit, order, count_limit) return super().web_search_read(domain, specification, offset, limit, order, count_limit) @api.model def _new_search_panel_domain_image(self, field_name, domain, set_count=False, limit=False): """ 重写增加根据selection的定义顺序返回search_panel筛选结果 """ field = self._fields[field_name] if field.type == 'many2one': def group_id_name(value): return value else: # field type is selection: see doc above desc = self.fields_get([field_name])[field_name] field_name_selection = dict(desc['selection']) def group_id_name(value): return value, field_name_selection[value] domain = AND([ domain, [(field_name, '!=', False)], ]) groups = self.read_group(domain, [field_name], [field_name], limit=limit) domain_image = {} for group in groups: id, display_name = group_id_name(group[field_name]) values = { 'id': id, 'display_name': display_name, } if set_count: values['__count'] = group[field_name + '_count'] domain_image[id] = values if field.type == 'selection': sorted_domain_image = dict(sorted(domain_image.items(), key=lambda x: list(field_name_selection.keys()).index(x[0]))) return sorted_domain_image return domain_image Base._search_panel_domain_image = _new_search_panel_domain_image