diff options
| author | Victor Feyens <vfe@odoo.com> | 2020-02-11 12:18:21 +0000 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2020-04-21 12:28:52 +0000 |
| commit | b415533dca2af9b84725b0c48ee5d26359760300 (patch) | |
| tree | 1eb5c445bb7fe5abd880aa2d20ce3532cc686f6b /addons/crm_iap_lead | |
| parent | 623567eba0884aba1213edacab767cc4c2732053 (diff) | |
[REF] crm(_iap_lead): use read_group instead of computing len of one2many fields
PURPOSE
Several counter fields are performed inefficiently. They use compute methods
using length of 2many fields instead of making use of more efficient ORM
methods like read_group.
SPECIFICATIONS
No functional change, only technical performance improvements.
Purpose is to improve lead_count performance. Some people claim to gain a lot
of queries: from 90 to 30 SQL queries to read 39 partners. Hard to reproduce.
LINKS
Task ID 2196182
PR odoo/odoo#44662
Co-Authored-By: Fabien Pinckaers <fp@odoo.com>
Co-Authored-By: Victor Feyens <vfe@odoo.com>
Co-Authored-By: Thibault Delavallee <tde@odoo.com>
Diffstat (limited to 'addons/crm_iap_lead')
| -rw-r--r-- | addons/crm_iap_lead/models/crm_iap_lead_mining_request.py | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/addons/crm_iap_lead/models/crm_iap_lead_mining_request.py b/addons/crm_iap_lead/models/crm_iap_lead_mining_request.py index b62e454ccbb..df7b9fa531a 100644 --- a/addons/crm_iap_lead/models/crm_iap_lead_mining_request.py +++ b/addons/crm_iap_lead/models/crm_iap_lead_mining_request.py @@ -76,8 +76,17 @@ class CRMLeadMiningRequest(models.Model): @api.depends('lead_ids') def _compute_leads_count(self): - for req in self: - req.leads_count = len(req.lead_ids) + if self.ids: + leads_data = self.env['crm.lead'].read_group( + [('lead_mining_request_id', 'in', self.ids)], + ['lead_mining_request_id'], ['lead_mining_request_id']) + else: + leads_data = [] + mapped_data = dict( + (m['lead_mining_request_id'][0], m['lead_mining_request_id_count']) + for m in leads_data) + for request in self: + request.leads_count = mapped_data.get(request.id, 0) @api.onchange('lead_number') def _onchange_lead_number(self): |
