Skip to content
Snippets Groups Projects
Commit d6aef973 authored by George Hickman's avatar George Hickman Committed by Fredrik Jonsson
Browse files

Add filters to the Leaderboard table

parent 30d50fb0
No related branches found
No related tags found
No related merge requests found
...@@ -23,7 +23,6 @@ from hypha.images.models import CustomImage ...@@ -23,7 +23,6 @@ from hypha.images.models import CustomImage
from .widgets import Select2MultiCheckboxesWidget from .widgets import Select2MultiCheckboxesWidget
User = get_user_model() User = get_user_model()
...@@ -363,6 +362,51 @@ class RoundsFilter(filters.FilterSet): ...@@ -363,6 +362,51 @@ class RoundsFilter(filters.FilterSet):
round_state = OpenRoundFilter(label='Open') round_state = OpenRoundFilter(label='Open')
class LeaderboardFilterForm(forms.ModelForm):
"""
Form to "clean" a list of User objects to their PKs.
The Leaderboard table is a list of User objects, however we also want the
ability to filter down to N Users (reviewers). Django filter is converting
the selected PKs to User objects, however we can't filter a User QuerySet
with User objects. So this form converts back to a list of User PKs using
the clean_reviewer method.
"""
class Meta:
fields = ["id"]
model = User
def clean_reviewer(self):
return [u.id for u in self.cleaned_data['reviewer']]
class LeaderboardFilter(filters.FilterSet):
reviewer = Select2ModelMultipleChoiceFilter(
field_name='pk',
label='Reviewers',
queryset=get_reviewers,
)
funds = Select2ModelMultipleChoiceFilter(
field_name='submission__page',
label='Funds',
queryset=get_used_funds,
)
rounds = Select2ModelMultipleChoiceFilter(
field_name='submission__round',
label='Rounds',
queryset=get_used_rounds,
)
class Meta:
fields = [
'reviewer',
'funds',
'rounds',
]
form = LeaderboardFilterForm
model = User
class LeaderboardTable(tables.Table): class LeaderboardTable(tables.Table):
full_name = tables.Column(verbose_name="Reviewer") full_name = tables.Column(verbose_name="Reviewer")
most_recent = tables.Column(orderable=False) most_recent = tables.Column(orderable=False)
......
...@@ -79,6 +79,7 @@ from .models import ( ...@@ -79,6 +79,7 @@ from .models import (
from .permissions import is_user_has_access_to_view_submission from .permissions import is_user_has_access_to_view_submission
from .tables import ( from .tables import (
AdminSubmissionsTable, AdminSubmissionsTable,
LeaderboardFilter,
LeaderboardTable, LeaderboardTable,
ReviewerSubmissionsTable, ReviewerSubmissionsTable,
RoundsFilter, RoundsFilter,
...@@ -1187,6 +1188,7 @@ class SubmissionResultView(FilterView): ...@@ -1187,6 +1188,7 @@ class SubmissionResultView(FilterView):
@method_decorator(login_required, name='dispatch') @method_decorator(login_required, name='dispatch')
class ReviewLeaderboard(SingleTableMixin, FilterView): class ReviewLeaderboard(SingleTableMixin, FilterView):
filterset_class = LeaderboardFilter
table_class = LeaderboardTable table_class = LeaderboardTable
table_pagination = False table_pagination = False
template_name = 'funds/review_leaderboard.html' template_name = 'funds/review_leaderboard.html'
......
...@@ -11,7 +11,7 @@ from ..groups import ( ...@@ -11,7 +11,7 @@ from ..groups import (
COMMUNITY_REVIEWER_GROUP_NAME, COMMUNITY_REVIEWER_GROUP_NAME,
PARTNER_GROUP_NAME, PARTNER_GROUP_NAME,
REVIEWER_GROUP_NAME, REVIEWER_GROUP_NAME,
STAFF_GROUP_NAME STAFF_GROUP_NAME,
) )
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment