From 9352bb682f2867a561df1f0322d1d5ffa06656c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Warnon?= Date: Tue, 12 Feb 2019 07:35:02 +0000 Subject: [PATCH] [IMP] website_slides: improve channel's "members_count" computation Task #1937160 Purpose ======= Performance improvement: The members_count computed field now uses a compute_sudo with a read_group allowing to compute all the members_count of the recordset in a single query. closes odoo/odoo#31013 --- addons/website_slides/models/slide_channel.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/addons/website_slides/models/slide_channel.py b/addons/website_slides/models/slide_channel.py index 7a02b4f21ab..c2e653411c1 100644 --- a/addons/website_slides/models/slide_channel.py +++ b/addons/website_slides/models/slide_channel.py @@ -110,7 +110,7 @@ class Channel(models.Model): partner_ids = fields.Many2many( 'res.partner', 'slide_channel_partner', 'channel_id', 'partner_id', string='Members', help="All members of the channel.", context={'active_test': False}) - members_count = fields.Integer('Attendees count', compute='_compute_members_count', groups="website.group_website_publisher") + members_count = fields.Integer('Attendees count', compute='_compute_members_count', compute_sudo=True) is_member = fields.Boolean(string='Is Member', compute='_compute_is_member') channel_partner_ids = fields.One2many('slide.channel.partner', 'channel_id', string='Members Information', groups='website.group_website_publisher') enroll_msg = fields.Html( @@ -127,8 +127,10 @@ class Channel(models.Model): @api.depends('partner_ids') def _compute_members_count(self): + read_group_res = self.env['slide.channel.partner'].read_group([('channel_id', 'in', self.ids)], [], 'channel_id') + data = dict((res['channel_id'][0], res['channel_id_count']) for res in read_group_res) for channel in self: - channel.members_count = len(channel.partner_ids) + channel.members_count = data.get(channel.id, 0) @api.depends('channel_partner_ids.partner_id') @api.model