From 9ff94fec74731f3df5241e1eec5019e1b111854c Mon Sep 17 00:00:00 2001 From: Victor Feyens Date: Tue, 11 Feb 2020 12:28:07 +0000 Subject: [PATCH] [IMP] website_forum: improve forum.post child_count performance. 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 forum.post child_count performance. LINKS Task ID 2196182 PR #44662 --- addons/website_forum/models/forum.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/addons/website_forum/models/forum.py b/addons/website_forum/models/forum.py index 5aba126395d..55137df5148 100644 --- a/addons/website_forum/models/forum.py +++ b/addons/website_forum/models/forum.py @@ -366,14 +366,15 @@ class Post(models.Model): @api.depends('child_ids.create_uid', 'website_message_ids') def _get_child_count(self): - def process(node): - total = len(node.website_message_ids) + len(node.child_ids) - for child in node.child_ids: - total += process(child) - return total - for post in self: - post.child_count = process(post) + children = self.search([('id', 'child_of', post.id)]) + children_count = len(children) + message_count = self.env['mail.message'].search_count([ + ('model', '=', post._name), + ('message_type', 'in', ['email', 'comment']), + ('res_id', 'in', children.ids + [post.id]), + ]) + post.child_count = children_count + message_count def _get_uid_has_answered(self): for post in self: