diff options
| author | Victor Feyens <vfe@odoo.com> | 2020-02-11 12:20:39 +0000 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2020-04-21 12:28:52 +0000 |
| commit | 3f6625ef134c35ad8fab00ca99b451a7dfabee08 (patch) | |
| tree | 1fd4dbc9de252a887fe91ed5b1cc7780bea6025a /addons/link_tracker | |
| parent | 2457e7f6f45b23118ce73c47112d60802411cc4b (diff) | |
[IMP] link_tracker, mass_mailing: uuse 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
There may be a lot of clicks linked to a given link tracker. Compute the count
of clicks in batch with a read_group to improve performance.
Same for utm campaign mailing count performances.
Some missing indexes are added to speedup queries.
LINKS
Task ID 2196182
PR #44662
Co-Authored-By: Victor Feyens <vfe@odoo.com>
Co-Authored-By: Thibault Delavallee <tde@odoo.com>
Diffstat (limited to 'addons/link_tracker')
| -rw-r--r-- | addons/link_tracker/models/link_tracker.py | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/addons/link_tracker/models/link_tracker.py b/addons/link_tracker/models/link_tracker.py index ec73046e1be..8ea1a04f50e 100644 --- a/addons/link_tracker/models/link_tracker.py +++ b/addons/link_tracker/models/link_tracker.py @@ -38,8 +38,17 @@ class LinkTracker(models.Model): @api.depends('link_click_ids.link_id') def _compute_count(self): + if self.ids: + clicks_data = self.env['link.tracker.click'].read_group( + [('link_id', 'in', self.ids)], + ['link_id'], + ['link_id'] + ) + mapped_data = {m['link_id'][0]: m['link_id_count'] for m in clicks_data} + else: + mapped_data = dict() for tracker in self: - tracker.count = len(tracker.link_click_ids) + tracker.count = mapped_data.get(tracker.id, 0) @api.depends('code') def _compute_short_url(self): @@ -187,8 +196,12 @@ class LinkTrackerClick(models.Model): _rec_name = "link_id" _description = "Link Tracker Click" - campaign_id = fields.Many2one(string='UTM Campaign', comodel_name="utm.campaign", related="link_id.campaign_id", store=True) - link_id = fields.Many2one('link.tracker', 'Link', required=True, ondelete='cascade') + campaign_id = fields.Many2one( + 'utm.campaign', 'UTM Campaign', + related="link_id.campaign_id", store=True) + link_id = fields.Many2one( + 'link.tracker', 'Link', + index=True, required=True, ondelete='cascade') ip = fields.Char(string='Internet Protocol') country_id = fields.Many2one('res.country', 'Country') |
