From 19e9f160f1a2157ab9ec9b2cd23d6e15cb1e13f8 Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 28 Apr 2021 10:49:19 +0100 Subject: [PATCH] . --- anatomy/filters.py | 41 +++++++++++++++++++++++++++++------------ anatomy/forms.py | 1 + anatomy/tables.py | 39 +++++++++++++++++++-------------------- anatomy/views.py | 10 ++++++++++ 4 files changed, 59 insertions(+), 32 deletions(-) diff --git a/anatomy/filters.py b/anatomy/filters.py index c54d1ae4..c31f4059 100644 --- a/anatomy/filters.py +++ b/anatomy/filters.py @@ -1,10 +1,36 @@ import django_filters -from .models import AnatomyQuestion, CidUserAnswer +from .models import AnatomyQuestion, CidUserAnswer, Exam #from generic.filters import UserAnswerFilter +def get_exams(request): + if request is None: + return Exam.objects.none() + + if not request.user.groups.filter(name="anatomy_checker").exists(): + queryset = Exam.objects.filter(author__id=request.user.id) + else: + queryset = Exam.objects.all() + + return queryset + +class AnatomyQuestionFilter(django_filters.FilterSet): + exams = django_filters.ModelMultipleChoiceFilter(queryset=get_exams) + class Meta: + model = AnatomyQuestion + fields = ("question_type" + "examination", + "modality", "region", + "body_part", "created_date", "open_access", "author") + + def __init__(self, data=None, queryset=None, prefix=None, strict=None, user=None, request=None): + if not request.user.groups.filter(name="anatomy_checker").exists(): + queryset = queryset.filter(open_access=True) | queryset.filter(author__id=request.user.id) + super(AnatomyQuestionFilter, self).__init__(data=data, queryset=queryset, prefix=prefix, request=request) + pass + class AnatomyUserAnswerFilter(django_filters.FilterSet): class Meta: model= CidUserAnswer @@ -18,17 +44,8 @@ class AnatomyUserAnswerFilter(django_filters.FilterSet): "updated", ) - -class AnatomyQuestionFilter(django_filters.FilterSet): - class Meta: - model = AnatomyQuestion - fields = ("question_type", "exams", - "examination", - "modality", "region", - "body_part", "created_date", "open_access", "author") - def __init__(self, data=None, queryset=None, prefix=None, strict=None, user=None, request=None): - if not request.user.groups.filter(name="anatomy_checker").exists(): + if not request.user.groups.filter(name="rapid_checker").exists(): queryset = queryset.filter(open_access=True) | queryset.filter(author__id=request.user.id) - super(AnatomyQuestionFilter, self).__init__(data=data, queryset=queryset, prefix=prefix, request=request) + super(AnatomyUserAnswerFilter, self).__init__(data=data, queryset=queryset, prefix=prefix, request=request) pass \ No newline at end of file diff --git a/anatomy/forms.py b/anatomy/forms.py index 321d51a2..982d9ae9 100644 --- a/anatomy/forms.py +++ b/anatomy/forms.py @@ -55,6 +55,7 @@ class AnatomyQuestionForm(ModelForm): js = ["jsi18n.js", "tesseract.min.js"] def __init__(self, *args, **kwargs): + self.user = kwargs.pop('user') # To get request.user. Do not use kwargs.pop('user', None) due to potential security hole super(AnatomyQuestionForm, self).__init__(*args, **kwargs) # self.fields['question'].widget.attrs = {'class': 'question-form', 'rows': 10, 'cols': 100} # self.fields['feedback'].widget.attrs = {'class': 'feedback-form', 'rows': 10, 'cols': 100} diff --git a/anatomy/tables.py b/anatomy/tables.py index d0a66c68..f96de558 100644 --- a/anatomy/tables.py +++ b/anatomy/tables.py @@ -12,25 +12,6 @@ from easy_thumbnails.exceptions import InvalidImageFormatError #from generic.tables import UserAnswerTable -class AnatomyUserAnswerTable(tables.Table): - select = tables.CheckBoxColumn(accessor=("pk")) - delete = tables.LinkColumn( - "anatomy:anatomy_user_answer_delete", text="Delete", args=[A("pk")], orderable=False - ) - class Meta: - model = CidUserAnswer - template_name = "django_tables2/bootstrap4.html" - fields = ( - "cid", - "question", - "answer", - #"answer_compare", - "exam", - "created", - "updated", - ) - - class ImageColumn(tables.Column): def render(self, value): try: @@ -73,4 +54,22 @@ class AnatomyQuestionTable(tables.Table): "open_access", "author", ) - sequence = ("view", "image", "exams") \ No newline at end of file + sequence = ("view", "image", "exams") +class AnatomyUserAnswerTable(tables.Table): + select = tables.CheckBoxColumn(accessor=("pk")) + delete = tables.LinkColumn( + "anatomy:anatomy_user_answer_delete", text="Delete", args=[A("pk")], orderable=False + ) + class Meta: + model = CidUserAnswer + template_name = "django_tables2/bootstrap4.html" + fields = ( + "cid", + "question", + "answer", + #"answer_compare", + "exam", + "created", + "updated", + ) + diff --git a/anatomy/views.py b/anatomy/views.py index e1c184c7..d980faf0 100644 --- a/anatomy/views.py +++ b/anatomy/views.py @@ -691,6 +691,11 @@ class AnatomyQuestionCreateBase(LoginRequiredMixin, CreateView): model = AnatomyQuestion form_class = AnatomyQuestionForm + def get_form_kwargs(self): + kwargs = super(AnatomyQuestionCreateBase, self).get_form_kwargs() + kwargs.update({'user': self.request.user}) + return kwargs + def get_context_data(self, **kwargs): context = super(AnatomyQuestionCreateBase, self).get_context_data(**kwargs) if self.request.POST: @@ -791,6 +796,11 @@ class AnatomyQuestionUpdate(LoginRequiredMixin, UpdateView): model = AnatomyQuestion form_class = AnatomyQuestionForm + def get_form_kwargs(self): + kwargs = super(AnatomyQuestionCreateBase, self).get_form_kwargs() + kwargs.update({'user': self.request.user}) + return kwargs + def get_context_data(self, **kwargs): context = super(AnatomyQuestionUpdate, self).get_context_data(**kwargs) if self.request.POST: