summaryrefslogtreecommitdiff
path: root/addons/link_tracker/models/link_tracker.py
diff options
context:
space:
mode:
authorOdoo's Mergebot <xmo+roboto@odoo.com>2020-04-21 15:31:50 +0200
committerGitHub <noreply@github.com>2020-04-21 15:31:50 +0200
commit2a1e53750f26a2ef1e5e18c7164b29dda4c97ff6 (patch)
tree7d2c8a76c31e29fdb17d73243f1cdaaa6e1e5a00 /addons/link_tracker/models/link_tracker.py
parentd27f8ef328e7a78b920fa1fb88770d1e3b538938 (diff)
parent9ff94fec74731f3df5241e1eec5019e1b111854c (diff)
[MERGE] various: use read_group instead of computing length of 2many 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 count performances (meeting count, applicant count), ... by using a read_group and maybe adding missing indexes. LINKS Task ID 2196182 PR #44662 Related: odoo/upgrade#973 Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
Diffstat (limited to 'addons/link_tracker/models/link_tracker.py')
-rw-r--r--addons/link_tracker/models/link_tracker.py19
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')