Display and filter authors on index pages
This commit is contained in:
+11
-19
@@ -39,7 +39,7 @@ from django.views.generic.edit import CreateView, UpdateView, DeleteView
|
||||
from django.views.generic.list import ListView
|
||||
from django.views.generic.detail import DetailView
|
||||
from django_filters.views import FilterView
|
||||
from django_filters import FilterSet, OrderingFilter
|
||||
from django_filters import FilterSet, OrderingFilter, ModelMultipleChoiceFilter
|
||||
from django_tables2.views import SingleTableMixin
|
||||
from reversion.views import RevisionMixin
|
||||
from atlas.models import CaseCollection
|
||||
@@ -320,7 +320,7 @@ class ExamViews(View, LoginRequiredMixin):
|
||||
# group_map = {"rapids" : "rapid_checker", "anatomy" : "anatomy_checker", "longs":"long_checker"}
|
||||
# exam_group = group_map[self.app_name]
|
||||
|
||||
class ExamFilter(FilterSet):
|
||||
class BasicExamFilter(FilterSet):
|
||||
sort_order = OrderingFilter(
|
||||
fields=(("name", "name"), ("exam_mode", "exam_mode"))
|
||||
)
|
||||
@@ -333,22 +333,7 @@ class ExamViews(View, LoginRequiredMixin):
|
||||
"active": ["exact"],
|
||||
"archive": ["exact"],
|
||||
"open_access": ["exact"],
|
||||
#'release_date': ['isnull'],
|
||||
}
|
||||
# filter_overrides = {
|
||||
# models.CharField: {
|
||||
# 'filter_class': django_filters.CharFilter,
|
||||
# 'extra': lambda f: {
|
||||
# 'lookup_expr': 'icontains',
|
||||
# },
|
||||
# },
|
||||
# models.BooleanField: {
|
||||
# 'filter_class': django_filters.BooleanFilter,
|
||||
# 'extra': lambda f: {
|
||||
# 'widget': forms.CheckboxInput,
|
||||
# },
|
||||
# },
|
||||
# }
|
||||
|
||||
def __init__(self, data=None, *args, **kwargs):
|
||||
# if filterset is bound, use initial values as defaults
|
||||
@@ -365,7 +350,13 @@ class ExamViews(View, LoginRequiredMixin):
|
||||
|
||||
super().__init__(data, *args, **kwargs)
|
||||
|
||||
self.ExamFilter = ExamFilter
|
||||
self.BasicExamFilter = BasicExamFilter
|
||||
|
||||
# We give some users the ability to filter by authors
|
||||
class ExtraExamFilter(BasicExamFilter):
|
||||
author = ModelMultipleChoiceFilter(queryset=User.objects.all(), null_label="No author")
|
||||
|
||||
self.ExtraExamFilter = ExtraExamFilter
|
||||
|
||||
# TODO: these may be better implemented as decorators
|
||||
def check_user_access(self, user: User, exam_id: int = None):
|
||||
@@ -1264,10 +1255,11 @@ class ExamViews(View, LoginRequiredMixin):
|
||||
)
|
||||
):
|
||||
exams = self.Exam.objects.all()
|
||||
filter = self.ExtraExamFilter(request.GET, queryset=exams)
|
||||
else:
|
||||
exams = self.Exam.objects.filter(author__id=request.user.id)
|
||||
filter = self.BasicExamFilter(request.GET, queryset=exams)
|
||||
|
||||
filter = self.ExamFilter(request.GET, queryset=exams)
|
||||
|
||||
return render(
|
||||
request,
|
||||
|
||||
Reference in New Issue
Block a user