diff --git a/src/accounts/views.py b/src/accounts/views.py index dc2689f..a957d98 100644 --- a/src/accounts/views.py +++ b/src/accounts/views.py @@ -23,6 +23,7 @@ from haystack.query import SearchQuerySet from super_archives.models import EmailAddress, Message from super_archives.utils.email import send_email_lists from search.utils import trans +from proxy.models import WikiCollabCount, TicketCollabCount from .forms import (UserCreationForm, ListsForm, UserUpdateForm, ChangeXMPPPasswordForm) from .errors import XMPPChangePwdException @@ -65,11 +66,25 @@ class UserProfileDetailView(UserProfileBaseMixin, DetailView): {'fullname_and_username__contains': user.username}, ) + counter_class = { + 'wiki': WikiCollabCount, + 'ticket': TicketCollabCount, + } + for type in ['thread', 'ticket', 'wiki', 'changeset', 'attachment']: - sqs = SearchQuerySet() - for filter_or in fields_or_lookup: - sqs = sqs.filter_or(type=type, **filter_or) - count_types[trans(type)] = sqs.count() + CounterClass = counter_class.get(type) + if CounterClass: + try: + counter = CounterClass.objects.get(username=user.username) + except CounterClass.DoesNotExist: + count_types[trans(type)] = 0 + else: + count_types[trans(type)] = counter.count + else: + sqs = SearchQuerySet() + for filter_or in fields_or_lookup: + sqs = sqs.filter_or(type=type, **filter_or) + count_types[trans(type)] = sqs.count() context['type_count'] = count_types diff --git a/src/badger/utils.py b/src/badger/utils.py index 6d00a7e..dd3f70f 100644 --- a/src/badger/utils.py +++ b/src/badger/utils.py @@ -2,16 +2,14 @@ from django.db.models import Count -from proxy.models import Revision, Ticket, Wiki +from proxy.models import (Revision, Ticket, Wiki, + WikiCollabCount, TicketCollabCount) from accounts.models import User def get_wiki_counters(): - return { - author: count for author, count in Wiki.objects.values_list( - 'author' - ).annotate(count=Count('author')) - } + return {author: count for author, count in + WikiCollabCount.objects.values_list()} def get_revision_counters(): @@ -23,11 +21,8 @@ def get_revision_counters(): def get_ticket_counters(): - return { - author: count for author, count in Ticket.objects.values_list( - 'author' - ).annotate(count=Count('author')) - } + return {author: count for author, count in + TicketCollabCount.objects.values_list()} def get_users_counters(): -- libgit2 0.21.2