[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
This commit is contained in:
Aurélien Warnon
2019-02-12 09:22:29 +00:00
parent 3259bad899
commit 9352bb682f
@@ -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