def get_invalid_group_members(group, queryset=None): '''Get person objects that won't qualify to be in a group''' if queryset is None: queryset = Person.objects.all() # Complex query sets on related models causing problem # likely because it cant handle when emailaddress is null # for exmple there fore i will do old fashined way. queryset = queryset\ .annotate(num_groups=Count('groups', distinct=True))\ .filter(groups=group)\ valid_pks = [] for p in queryset: # Must have a valid email address # Must have a username of length > 0 # Can only belong to one group verified_email = email_verified(p) if verified_email: if p.num_groups == 1: if p.username is not None: if len(p.username) > 1: valid_pks.append(p.pk) queryset = queryset.exclude(pk__in=valid_pks) return queryset
def get_context_data(self, **kwargs): context = \ super(GroupStatsView, self).get_context_data(**kwargs) group = context['group'] context['x_title'] = _('Group Leaderboard: {0}').format(group) context['x_description'] = _("Leaderboard for members of {0}.").format( group) language = get_current_language(self.request) people = Person.objects.all() valid_members = people valid_members = get_valid_group_members(group, valid_members) invalid_members = people invalid_members = get_invalid_group_members(group, invalid_members) # people = people\ # .filter(recording__sentence__language=language) # score, count = get_competition_group_score(group) num_recordings = 0 if valid_members: for member in valid_members: recordings = filter_qs_for_competition( Recording.objects.filter(person=member)) member.num_recordings = recordings.count() if invalid_members: invalid_members = invalid_members\ .annotate(num_groups=Count('groups', distinct=True)) for member in invalid_members: recordings = filter_qs_for_competition( Recording.objects.filter(person=member)) member.num_recordings = recordings.count() member.verified = email_verified(member) form = ResendEmailVerificationForm() group.duration_hours = group.duration / 60 / 60 context['group'] = group context['score'] = group.score context['form'] = form context['people'] = people.filter(groups=group) context['valid_members'] = valid_members context['invalid_members'] = invalid_members return context