# HG changeset patch # User neko259 # Date 2014-02-02 21:25:35 # Node ID 9b64cf8c34e8c7ba1f00c53f5716cf2590025fc1 # Parent 01b85c7d8988c5462e461feef0cf058dfeff9eac Use aggregation to get tags popularity diff --git a/boards/models/tag.py b/boards/models/tag.py --- a/boards/models/tag.py +++ b/boards/models/tag.py @@ -1,6 +1,6 @@ from boards.models import Thread, Post from django.db import models -from django.db.models import Count +from django.db.models import Count, Sum __author__ = 'neko259' @@ -92,8 +92,12 @@ class Tag(models.Model): def get_post_count(self, archived=False): posts_count = 0 - for thread in self.threads.annotate(Count('replies')).filter( - archived=archived): - posts_count += thread.replies__count + threads = self.threads.filter(archived=archived) + if threads.exists(): + posts_count = threads.annotate(posts_count=Count('replies')).aggregate( + posts_sum=Sum('posts_count'))['posts_sum'] + + if not posts_count: + posts_count = 0 return posts_count