From 7704132897731d28e5a38f5d87006e4b899c8707 Mon Sep 17 00:00:00 2001 From: Ross Date: Tue, 29 Mar 2022 22:26:41 +0100 Subject: [PATCH] . --- atlas/filters.py | 30 ++++++++++++++++++++++++++++-- atlas/models.py | 7 ++++++- atlas/views.py | 2 +- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/atlas/filters.py b/atlas/filters.py index 63461a6d..29d2ffb3 100755 --- a/atlas/filters.py +++ b/atlas/filters.py @@ -24,11 +24,35 @@ def get_authors(request): return queryset +def get_cases(request): + if request is None: + return Case.objects.none() + + if not request.user.groups.filter(name="atlas_editor").exists(): + queryset = Case.objects.filter(author__id=request.user.id) + else: + queryset = Case.objects.all() + + return queryset + +def get_series(request): + if request is None: + return Series.objects.none() + + if not request.user.groups.filter(name="atlas_editor").exists(): + queryset = Series.objects.filter(author__id=request.user.id) + else: + queryset = Series.objects.all() + + return queryset class CaseFilter(django_filters.FilterSet): author = django_filters.ModelMultipleChoiceFilter( queryset=get_authors, null_label="No author" ) + series = django_filters.ModelMultipleChoiceFilter( + queryset=get_series, null_label="No series" + ) differential_case = django_filters.ModelMultipleChoiceFilter( label="Differential", field_name="differentialcase__condition", @@ -55,7 +79,6 @@ class CaseFilter(django_filters.FilterSet): request=None, ): if not request.user.groups.filter(name="atlas_editor").exists(): - # queryset = queryset.filter(open_access=True) | queryset.filter(author__id=request.user.id) queryset = queryset.prefetch_related("author").filter(author__id=request.user.id) super(CaseFilter, self).__init__( data=data, queryset=queryset, prefix=prefix, request=request @@ -65,7 +88,10 @@ class CaseFilter(django_filters.FilterSet): class SeriesFilter(django_filters.FilterSet): case = django_filters.ModelMultipleChoiceFilter( - queryset=Case.objects.all(), null_label="No case" + queryset=get_cases, null_label="No case" + ) + author = django_filters.ModelMultipleChoiceFilter( + queryset=get_authors, null_label="No author" ) class Meta: diff --git a/atlas/models.py b/atlas/models.py index 9caf3de4..6d187e7a 100644 --- a/atlas/models.py +++ b/atlas/models.py @@ -72,7 +72,6 @@ def findMiddle(input_list): return input_list[int(middle)] return (input_list[int(middle)], input_list[int(middle - 1)]) - class SynMixin(object): # class Meta: # abstract = True @@ -586,6 +585,12 @@ class CaseCollection(models.Model): def __str__(self) -> str: return self.name + + def get_author_objects(self): + """Returns a comma seperated text list of authors""" + authors = [i for i in self.author.all()] + return authors + class CaseDetail(models.Model): case = models.ForeignKey(Case, on_delete=models.CASCADE) diff --git a/atlas/views.py b/atlas/views.py index d2f3829a..b549424e 100755 --- a/atlas/views.py +++ b/atlas/views.py @@ -455,7 +455,7 @@ class SeriesCreate(RevisionMixin, LoginRequiredMixin, CreateView): return super().form_invalid(form) -class CaseCollectionUpdate(RevisionMixin, LoginRequiredMixin, UpdateView): +class CaseCollectionUpdate(RevisionMixin, AuthorOrCheckerRequiredMixin, UpdateView): model = CaseCollection form_class = CaseCollectionForm