Skip to content
This repository has been archived by the owner on Jan 19, 2021. It is now read-only.

Bug 1030673 - [groups] Group page should list common skills among group members #1043

Closed
wants to merge 18 commits into from
Closed
18 changes: 14 additions & 4 deletions mozillians/groups/views.py
Expand Up @@ -3,7 +3,7 @@
from django.conf import settings
from django.contrib import messages
from django.core.paginator import EmptyPage, Paginator, PageNotAnInteger
from django.db.models import Q
from django.db.models import Count, Q
from django.http import HttpResponse, HttpResponseBadRequest, Http404
from django.shortcuts import get_object_or_404, redirect, render
from django.views.decorators.cache import cache_control, never_cache
Expand Down Expand Up @@ -143,9 +143,19 @@ def show(request, url, alias_model, template):

# Get the most globally popular skills that appear in the group
# Sort them with most members first.
skills = (Skill.objects
.filter(members__in=memberships.values_list('userprofile', flat=True))
.order_by('-member_count'))
# Bug 1030673:To get common skills, first group by skill_name and then
# order by skill_count and then skill_name.
# Get the UserProfile Id list.
skills = None
userprofile_id_list = UserProfile.objects.filter(groupmembership__in=memberships)
# Getting common skills_id among group and count of each skill_id across group
shared_skill_ids = userprofile_id_list.values_list('skills', flat=True).\
annotate(skill_count=Count('skills')).\
order_by('-skill_count', 'skills__name')
# If group doesn not have any skills then list will [None]
if shared_skill_ids and shared_skill_ids[0]:
# Create Skill object list from skill_id list
skills = [Skill.objects.get(id=skill_id) for skill_id in shared_skill_ids]
data.update(skills=skills, membership_filter_form=membership_filter_form)

page = request.GET.get('page', 1)
Expand Down