diff --git a/atlas/forms.py b/atlas/forms.py index f38fdf18..9ece1899 100755 --- a/atlas/forms.py +++ b/atlas/forms.py @@ -922,15 +922,8 @@ class PriorCaseForm(Form): # ) class CaseSeriesForm(forms.ModelForm): - def __init__(self, *args, user=None, is_atlas_editor=False, **kwargs): + def __init__(self, *args, queryset, user=None, is_atlas_editor=False, **kwargs): super().__init__(*args, **kwargs) - if not is_atlas_editor: - queryset = Series.objects.filter(author__id=user.id) - else: - queryset = Series.objects.all() - queryset = queryset.select_related("modality").prefetch_related( - "examination", "plane", "contrast", "images" - ) self.fields["series"].queryset = queryset class Meta: @@ -952,12 +945,22 @@ class CaseUpdateSeriesForm(forms.ModelForm): model = Case fields = [] # No fields, just for compatibility with UpdateView +class BaseSeriesFormSet(BaseInlineFormSet): + def __init__(self, *args, queryset=None, **kwargs): + self.series_queryset = queryset + super().__init__(*args, **kwargs) + + def get_form_kwargs(self, index): + kwargs = super().get_form_kwargs(index) + kwargs['queryset'] = self.series_queryset + return kwargs SeriesFormSet = inlineformset_factory( Case, SeriesDetail, form=CaseSeriesForm, + formset=BaseSeriesFormSet, extra=1, can_delete=True, ) \ No newline at end of file diff --git a/atlas/views.py b/atlas/views.py index 3114d0a3..34e1a404 100755 --- a/atlas/views.py +++ b/atlas/views.py @@ -4,6 +4,7 @@ from typing import Any from dal import autocomplete from django.db.models.base import Model as Model from django.db.models.query import QuerySet +from django.db.models import Prefetch from django.shortcuts import render, get_object_or_404, redirect from django import forms from django.utils import timezone @@ -974,11 +975,11 @@ class AtlasCreateBase(RevisionMixin, LoginRequiredMixin): def get_context_data(self, **kwargs): context = super(AtlasCreateBase, self).get_context_data(**kwargs) if self.request.POST: - context["series_formset"] = SeriesFormSet( - self.request.POST, - self.request.FILES, - form_kwargs={"user": self.request.user}, - ) + #context["series_formset"] = SeriesFormSet( + # self.request.POST, + # self.request.FILES, + # form_kwargs={"user": self.request.user}, + #) context["casedifferential_formset"] = CaseDifferentialFormSet( self.request.POST, self.request.FILES ) @@ -987,14 +988,14 @@ class AtlasCreateBase(RevisionMixin, LoginRequiredMixin): self.request.FILES, form_kwargs={"user": self.request.user}, ) - context["series_formset"].full_clean() + #context["series_formset"].full_clean() context["casedifferential_formset"].full_clean() context["caseresource_formset"].full_clean() else: # context["series_formset"] = SeriesFormSet(instance=Case.objects.filter(author__id=self.request.user.id), queryset=Series.objects.filter(author__id=self.request.user.id)) - context["series_formset"] = SeriesFormSet( - form_kwargs={"user": self.request.user} - ) + #context["series_formset"] = SeriesFormSet( + # form_kwargs={"user": self.request.user} + #) context["casedifferential_formset"] = CaseDifferentialFormSet() context["caseresource_formset"] = CaseResourceFormSet( form_kwargs={"user": self.request.user} @@ -1174,16 +1175,29 @@ class AtlasSeriesUpdate( context = super().get_context_data(**kwargs) is_atlas_editor = self.request.user.groups.filter(name="atlas_editor").exists() or self.request.user.is_superuser form_kwargs = {"user": self.request.user, "is_atlas_editor": is_atlas_editor} + + if not is_atlas_editor: + queryset = Series.objects.filter(author__id=self.request.user.id) + else: + queryset = Series.objects.all() + queryset = queryset.select_related("modality").prefetch_related( + "examination", "plane", "contrast", + Prefetch("images", queryset=SeriesImage.objects.filter(removed=False).order_by("position")) + + ) + if self.request.POST: context["series_formset"] = SeriesFormSet( self.request.POST, self.request.FILES, + queryset=queryset, instance=self.object, form_kwargs=form_kwargs, ) context["series_formset"].full_clean() else: context["series_formset"] = SeriesFormSet( + queryset=queryset, instance=self.object, form_kwargs=form_kwargs, )