diff --git a/addons/account/models/account.py b/addons/account/models/account.py index ed57081a8a2..967656fd90e 100644 --- a/addons/account/models/account.py +++ b/addons/account/models/account.py @@ -361,7 +361,7 @@ class AccountAccount(models.Model): if operator in expression.NEGATIVE_TERM_OPERATORS: domain = ['&', '!'] + domain[1:] account_ids = self._search(expression.AND([domain, args]), limit=limit, access_rights_uid=name_get_uid) - return self.browse(account_ids).name_get() + return models.lazy_name_get(self.browse(account_ids).with_user(name_get_uid)) @api.onchange('user_type_id') def _onchange_user_type_id(self): @@ -562,7 +562,7 @@ class AccountGroup(models.Model): criteria_operator = ['|'] if operator not in expression.NEGATIVE_TERM_OPERATORS else ['&', '!'] domain = criteria_operator + [('code_prefix', '=ilike', name + '%'), ('name', operator, name)] group_ids = self._search(expression.AND([domain, args]), limit=limit, access_rights_uid=name_get_uid) - return self.browse(group_ids).name_get() + return models.lazy_name_get(self.browse(group_ids).with_user(name_get_uid)) class AccountRoot(models.Model): @@ -1034,7 +1034,7 @@ class AccountJournal(models.Model): connector = '&' if operator in expression.NEGATIVE_TERM_OPERATORS else '|' domain = [connector, ('code', operator, name), ('name', operator, name)] journal_ids = self._search(expression.AND([domain, args]), limit=limit, access_rights_uid=name_get_uid) - return self.browse(journal_ids).name_get() + return models.lazy_name_get(self.browse(journal_ids).with_user(name_get_uid)) @api.depends('inbound_payment_method_ids', 'outbound_payment_method_ids') def _methods_compute(self): @@ -1248,7 +1248,7 @@ class AccountTax(models.Model): connector = '&' if operator in expression.NEGATIVE_TERM_OPERATORS else '|' domain = [connector, ('description', operator, name), ('name', operator, name)] tax_ids = self._search(expression.AND([domain, args]), limit=limit, access_rights_uid=name_get_uid) - return self.browse(tax_ids).name_get() + return models.lazy_name_get(self.browse(tax_ids).with_user(name_get_uid)) @api.model def _search(self, args, offset=0, limit=None, order=None, count=False, access_rights_uid=None): diff --git a/addons/analytic/models/analytic_account.py b/addons/analytic/models/analytic_account.py index 9d08316ee01..286ff4a66f5 100644 --- a/addons/analytic/models/analytic_account.py +++ b/addons/analytic/models/analytic_account.py @@ -164,7 +164,7 @@ class AccountAnalyticAccount(models.Model): partner_ids = self.env['res.partner']._search([('name', operator, name)], limit=limit, access_rights_uid=name_get_uid) domain = ['|', '|', ('code', operator, name), ('name', operator, name), ('partner_id', 'in', partner_ids)] analytic_account_ids = self._search(expression.AND([domain, args]), limit=limit, access_rights_uid=name_get_uid) - return self.browse(analytic_account_ids).name_get() + return models.lazy_name_get(self.browse(analytic_account_ids).with_user(name_get_uid)) class AccountAnalyticLine(models.Model): diff --git a/addons/fleet/models/fleet_vehicle.py b/addons/fleet/models/fleet_vehicle.py index d5501a42e21..6f61451c914 100644 --- a/addons/fleet/models/fleet_vehicle.py +++ b/addons/fleet/models/fleet_vehicle.py @@ -264,7 +264,7 @@ class FleetVehicle(models.Model): else: domain = ['|', ('name', operator, name), ('driver_id.name', operator, name)] rec = self._search(expression.AND([domain, args]), limit=limit, access_rights_uid=name_get_uid) - return self.browse(rec).name_get() + return models.lazy_name_get(self.browse(rec).with_user(name_get_uid)) def return_action_to_open(self): """ This opens the xml view specified in xml_id for the current vehicle """ diff --git a/addons/maintenance/models/maintenance.py b/addons/maintenance/models/maintenance.py index 56f14057740..3fadd6d83d6 100644 --- a/addons/maintenance/models/maintenance.py +++ b/addons/maintenance/models/maintenance.py @@ -118,7 +118,7 @@ class MaintenanceEquipment(models.Model): equipment_ids = self._search([('name', '=', name)] + args, limit=limit, access_rights_uid=name_get_uid) if not equipment_ids: equipment_ids = self._search([('name', operator, name)] + args, limit=limit, access_rights_uid=name_get_uid) - return self.browse(equipment_ids).name_get() + return models.lazy_name_get(self.browse(equipment_ids).with_user(name_get_uid)) name = fields.Char('Equipment Name', required=True, translate=True) company_id = fields.Many2one('res.company', string='Company', diff --git a/addons/product/models/product.py b/addons/product/models/product.py index e566cc0cf22..fe3fac09f76 100644 --- a/addons/product/models/product.py +++ b/addons/product/models/product.py @@ -534,7 +534,7 @@ class ProductProduct(models.Model): product_ids = self._search([('product_tmpl_id.seller_ids', 'in', suppliers_ids)], limit=limit, access_rights_uid=name_get_uid) else: product_ids = self._search(args, limit=limit, access_rights_uid=name_get_uid) - return self.browse(product_ids).name_get() + return models.lazy_name_get(self.browse(product_ids).with_user(name_get_uid)) @api.model def view_header_get(self, view_id, view_type): diff --git a/addons/product/models/product_attribute.py b/addons/product/models/product_attribute.py index 1ce3674a099..59b9f5492a5 100644 --- a/addons/product/models/product_attribute.py +++ b/addons/product/models/product_attribute.py @@ -361,7 +361,7 @@ class ProductTemplateAttributeLine(models.Model): args = args or [] domain = ['|', ('attribute_id', operator, name), ('value_ids', operator, name)] attribute_ids = self._search(expression.AND([domain, args]), limit=limit, access_rights_uid=name_get_uid) - return self.browse(attribute_ids).name_get() + return models.lazy_name_get(self.browse(attribute_ids).with_user(name_get_uid)) return super(ProductTemplateAttributeLine, self)._name_search(name=name, args=args, operator=operator, limit=limit, name_get_uid=name_get_uid) def _without_no_variant_attributes(self): diff --git a/addons/product/models/product_pricelist.py b/addons/product/models/product_pricelist.py index 82fed4993c5..dd8fa820a05 100644 --- a/addons/product/models/product_pricelist.py +++ b/addons/product/models/product_pricelist.py @@ -71,7 +71,7 @@ class Pricelist(models.Model): # regular search() to apply ACLs - may limit results below limit in some cases pricelist_ids = self._search([('id', 'in', ids)], limit=limit, access_rights_uid=name_get_uid) if pricelist_ids: - return self.browse(pricelist_ids).name_get() + return models.lazy_name_get(self.browse(pricelist_ids).with_user(name_get_uid)) return super(Pricelist, self)._name_search(name, args, operator=operator, limit=limit, name_get_uid=name_get_uid) def _compute_price_rule_multi(self, products_qty_partner, date=False, uom_id=False): diff --git a/addons/purchase/models/purchase.py b/addons/purchase/models/purchase.py index ee4f1aaa3ec..e9545bb202d 100644 --- a/addons/purchase/models/purchase.py +++ b/addons/purchase/models/purchase.py @@ -134,7 +134,7 @@ class PurchaseOrder(models.Model): if name: domain = ['|', ('name', operator, name), ('partner_ref', operator, name)] purchase_order_ids = self._search(expression.AND([domain, args]), limit=limit, access_rights_uid=name_get_uid) - return self.browse(purchase_order_ids).name_get() + return models.lazy_name_get(self.browse(purchase_order_ids).with_user(name_get_uid)) @api.depends('date_order', 'currency_id', 'company_id', 'company_id.currency_id') def _compute_currency_rate(self): diff --git a/addons/stock/models/stock_location.py b/addons/stock/models/stock_location.py index ec304508e5c..aad2c0bcda4 100644 --- a/addons/stock/models/stock_location.py +++ b/addons/stock/models/stock_location.py @@ -130,7 +130,7 @@ class Location(models.Model): else: domain = ['|', ('barcode', operator, name), ('complete_name', operator, name)] location_ids = self._search(expression.AND([domain, args]), limit=limit, access_rights_uid=name_get_uid) - return self.browse(location_ids).name_get() + return models.lazy_name_get(self.browse(location_ids).with_user(name_get_uid)) def _get_putaway_strategy(self, product): ''' Returns the location where the product has to be put, if any compliant putaway strategy is found. Otherwise returns None.''' diff --git a/addons/stock/models/stock_picking.py b/addons/stock/models/stock_picking.py index 172fd473e5f..931f789cc08 100644 --- a/addons/stock/models/stock_picking.py +++ b/addons/stock/models/stock_picking.py @@ -160,7 +160,7 @@ class PickingType(models.Model): if name: domain = ['|', ('name', operator, name), ('warehouse_id.name', operator, name)] picking_ids = self._search(expression.AND([domain, args]), limit=limit, access_rights_uid=name_get_uid) - return self.browse(picking_ids).name_get() + return models.lazy_name_get(self.browse(picking_ids).with_user(name_get_uid)) @api.onchange('code') def _onchange_picking_code(self): diff --git a/odoo/addons/base/models/ir_actions.py b/odoo/addons/base/models/ir_actions.py index 64387b0c5c1..38d9ad6911f 100644 --- a/odoo/addons/base/models/ir_actions.py +++ b/odoo/addons/base/models/ir_actions.py @@ -702,7 +702,7 @@ class IrActionsTodo(models.Model): args = args or [] if name: action_ids = self._search(expression.AND([[('action_id', operator, name)], args]), limit=limit, access_rights_uid=name_get_uid) - return self.browse(action_ids).name_get() + return models.lazy_name_get(self.browse(action_ids).with_user(name_get_uid)) return super(IrActionsTodo, self)._name_search(name, args=args, operator=operator, limit=limit, name_get_uid=name_get_uid) def action_launch(self): diff --git a/odoo/addons/base/models/ir_model.py b/odoo/addons/base/models/ir_model.py index 1ec2cd6de2a..1a2aa104c24 100644 --- a/odoo/addons/base/models/ir_model.py +++ b/odoo/addons/base/models/ir_model.py @@ -172,11 +172,12 @@ class IrModel(models.Model): # overridden to allow searching both on model name (field 'model') and model # description (field 'name') @api.model - def _name_search(self, name='', args=None, operator='ilike', limit=100): + def _name_search(self, name='', args=None, operator='ilike', limit=100, name_get_uid=None): if args is None: args = [] domain = args + ['|', ('model', operator, name), ('name', operator, name)] - return super(IrModel, self).search(domain, limit=limit).name_get() + model_ids = self._search(domain, limit=limit, access_rights_uid=name_get_uid) + return models.lazy_name_get(self.browse(model_ids).with_user(name_get_uid)) def _drop_table(self): for model in self: diff --git a/odoo/addons/base/models/ir_ui_view.py b/odoo/addons/base/models/ir_ui_view.py index 27236c8a6c9..9ec9e1777d7 100644 --- a/odoo/addons/base/models/ir_ui_view.py +++ b/odoo/addons/base/models/ir_ui_view.py @@ -136,7 +136,7 @@ class ViewCustom(models.Model): def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None): if name: view_ids = self._search([('user_id', operator, name)] + (args or []), limit=limit, access_rights_uid=name_get_uid) - return self.browse(view_ids).name_get() + return models.lazy_name_get(self.browse(view_ids).with_user(name_get_uid)) return super(ViewCustom, self)._name_search(name, args=args, operator=operator, limit=limit, name_get_uid=name_get_uid) def _auto_init(self): diff --git a/odoo/addons/base/models/res_bank.py b/odoo/addons/base/models/res_bank.py index 1ff217c4af9..6910385f437 100644 --- a/odoo/addons/base/models/res_bank.py +++ b/odoo/addons/base/models/res_bank.py @@ -48,7 +48,7 @@ class Bank(models.Model): if operator in expression.NEGATIVE_TERM_OPERATORS: domain = ['&'] + domain bank_ids = self._search(domain + args, limit=limit, access_rights_uid=name_get_uid) - return self.browse(bank_ids).name_get() + return models.lazy_name_get(self.browse(bank_ids).with_user(name_get_uid)) @api.onchange('country') def _onchange_country_id(self): diff --git a/odoo/addons/base/models/res_country.py b/odoo/addons/base/models/res_country.py index 2655f1ba01e..e8f9a7f53a0 100644 --- a/odoo/addons/base/models/res_country.py +++ b/odoo/addons/base/models/res_country.py @@ -25,7 +25,7 @@ def location_name_search(self, name='', args=None, operator='ilike', limit=100): records += self.search(search_domain + args, limit=limit) # the field 'display_name' calls name_get() to get its value - return [(record.id, record.display_name) for record in records] + return models.lazy_name_get(records) class Country(models.Model): @@ -131,7 +131,7 @@ class CountryState(models.Model): first_state_ids = self._search(expression.AND([first_domain, args]), limit=limit, access_rights_uid=name_get_uid) if first_domain else [] state_ids = first_state_ids + [state_id for state_id in self._search(expression.AND([domain, args]), limit=limit, access_rights_uid=name_get_uid) if not state_id in first_state_ids] - return self.browse(state_ids).name_get() + return models.lazy_name_get(self.browse(state_ids).with_user(name_get_uid)) def name_get(self): result = [] diff --git a/odoo/addons/base/models/res_partner.py b/odoo/addons/base/models/res_partner.py index 7cf95adc2e1..05238f3d31b 100644 --- a/odoo/addons/base/models/res_partner.py +++ b/odoo/addons/base/models/res_partner.py @@ -116,7 +116,7 @@ class PartnerCategory(models.Model): name = name.split(' / ')[-1] args = [('name', operator, name)] + args partner_category_ids = self._search(args, limit=limit, access_rights_uid=name_get_uid) - return self.browse(partner_category_ids).name_get() + return models.lazy_name_get(self.browse(partner_category_ids).with_user(name_get_uid)) class PartnerTitle(models.Model): diff --git a/odoo/addons/base/models/res_users.py b/odoo/addons/base/models/res_users.py index 805ab113268..ea8a05811f3 100644 --- a/odoo/addons/base/models/res_users.py +++ b/odoo/addons/base/models/res_users.py @@ -520,7 +520,7 @@ class Users(models.Model): user_ids = self._search(expression.AND([domain, args]), limit=limit, access_rights_uid=name_get_uid) if not user_ids: user_ids = self._search(expression.AND([[('name', operator, name)], args]), limit=limit, access_rights_uid=name_get_uid) - return self.browse(user_ids).name_get() + return models.lazy_name_get(self.browse(user_ids).with_user(name_get_uid)) def copy(self, default=None): self.ensure_one() diff --git a/odoo/addons/test_impex/models.py b/odoo/addons/test_impex/models.py index 353c8223f82..296c4677cc3 100644 --- a/odoo/addons/test_impex/models.py +++ b/odoo/addons/test_impex/models.py @@ -51,7 +51,7 @@ for name, field in MODELS: def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None): if isinstance(name, str) and name.split(':')[0] == self._name: record_ids = self._search([('value', operator, int(name.split(':')[1]))], access_rights_uid=name_get_uid) - return self.browse(record_ids).name_get() + return models.lazy_name_get(self.browse(record_ids).with_user(name_get_uid)) else: return [] @@ -72,7 +72,7 @@ class One2ManyChild(models.Model): def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None): if isinstance(name, str) and name.split(':')[0] == self._name: record_ids = self._search([('value', operator, int(name.split(':')[1]))], access_rights_uid=name_get_uid) - return self.browse(record_ids).name_get() + return models.lazy_name_get(self.browse(record_ids).with_user(name_get_uid)) else: return [] @@ -129,7 +129,7 @@ class Many2ManyChild(models.Model): def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None): if isinstance(name, str) and name.split(':')[0] == self._name: record_ids = self._search([('value', operator, int(name.split(':')[1]))], access_rights_uid=name_get_uid) - return self.browse(record_ids).name_get() + return models.lazy_name_get(self.browse(record_ids).with_user(name_get_uid)) else: return []