From d7499e91663927b3233478d49651b70e78d0e79c Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 7 Jul 2025 11:41:44 +0100 Subject: [PATCH] some updates --- atlas/forms.py | 131 +++++++++++++----- atlas/templates/atlas/case_update_series.html | 65 +++++++++ atlas/templates/atlas/collection_viva.html | 1 + .../templates/atlas/question_link_header.html | 1 + atlas/urls.py | 5 + atlas/views.py | 129 +++++++++++++---- generic/models.py | 7 +- generic/views.py | 2 - templates/base.html | 2 +- 9 files changed, 283 insertions(+), 60 deletions(-) create mode 100644 atlas/templates/atlas/case_update_series.html diff --git a/atlas/forms.py b/atlas/forms.py index 3aac298d..f38fdf18 100755 --- a/atlas/forms.py +++ b/atlas/forms.py @@ -32,6 +32,7 @@ from atlas.models import ( Resource, SelfReview, Series, + SeriesDetail, SeriesImage, SeriesFinding, Condition, @@ -296,6 +297,31 @@ class SeriesForm(ModelForm): } + #def save(self, commit=True): + # # Get the unsaved Case instance + # instance = ModelForm.save(self, False) + + + # # Prepare a 'save_m2m' method for the form, + # old_save_m2m = self.save_m2m + + # def save_m2m(): + # old_save_m2m() + # # instance.exams.clear() + # # for exam in self.cleaned_data["exams"]: + # # # We need the id here + # # instance.exams.add(exam.pk) + + # self.save_m2m = save_m2m + + # # Do we need to save all changes now? + # # if commit: + # instance.save() + # self.save_m2m() + + + # return instance + class CaseForm(ModelForm): class Media: @@ -523,28 +549,28 @@ class CaseResourceForm(ModelForm): self.fields["pre_review"] = BooleanField(required=False) -class CaseSeriesForm(ModelForm): - - def __init__(self, *args, user, **kwargs): - super(CaseSeriesForm, self).__init__(*args, **kwargs) - - if not user.groups.filter(name="atlas_editor").exists(): - queryset = Series.objects.filter(author__id=user.id) - else: - queryset = Series.objects.all() - - # Optimize the queryset for the ModelChoiceField - queryset = queryset.select_related( - "modality" - ).prefetch_related( - "examination", "plane", "contrast", "images" - ) - - self.fields["series"] = ModelChoiceField( - required=False, - queryset=queryset, - # widget=Select(verbose_name="Series", is_stacked=False), - ) +#class CaseSeriesForm(ModelForm): +# +# def __init__(self, *args, user, **kwargs): +# super(CaseSeriesForm, self).__init__(*args, **kwargs) +# +# if not user.groups.filter(name="atlas_editor").exists(): +# queryset = Series.objects.filter(author__id=user.id) +# else: +# queryset = Series.objects.all() +# +# # Optimize the queryset for the ModelChoiceField +# queryset = queryset.select_related( +# "modality" +# ).prefetch_related( +# "examination", "plane", "contrast", "images" +# ) +# +# self.fields["series"] = ModelChoiceField( +# required=False, +# queryset=queryset, +# # widget=Select(verbose_name="Series", is_stacked=False), +# ) @@ -561,15 +587,15 @@ class CaseCollectionCaseForm(ModelForm): ) -SeriesFormSet = inlineformset_factory( - Case, - Series.case.through, - form=CaseSeriesForm, - exclude=[], - can_delete=True, - extra=0, - max_num=10, -) +#SeriesFormSet = inlineformset_factory( +# Case, +# Series.case.through, +# form=CaseSeriesForm, +# exclude=[], +# can_delete=True, +# extra=0, +# max_num=10, +#) CaseCollectionCaseFormSet = inlineformset_factory( CaseCollection, @@ -893,4 +919,45 @@ class PriorCaseForm(Form): # self.fields["case"] = ChoiceField( # required=False, # # widget=Select(verbose_name="Series", is_stacked=False), - # ) \ No newline at end of file + # ) + +class CaseSeriesForm(forms.ModelForm): + def __init__(self, *args, 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: + model = SeriesDetail # through model for Case.series + fields = ["series", "sort_order", "feedback"] + +class CaseUpdateSeriesForm(forms.ModelForm): + def __init__(self, *args, **kwargs): + self.user = kwargs.pop("user") + super().__init__(*args, **kwargs) + self.helper = FormHelper() + self.helper.form_id = "id-case-form" + self.helper.form_class = "case-form" + self.helper.form_method = "post" + self.helper.form_action = "submit" + self.helper.form_tag = False + self.helper.layout = Layout() + class Meta: + model = Case + fields = [] # No fields, just for compatibility with UpdateView + + + +SeriesFormSet = inlineformset_factory( + Case, + SeriesDetail, + form=CaseSeriesForm, + extra=1, + can_delete=True, +) \ No newline at end of file diff --git a/atlas/templates/atlas/case_update_series.html b/atlas/templates/atlas/case_update_series.html new file mode 100644 index 00000000..2ee79223 --- /dev/null +++ b/atlas/templates/atlas/case_update_series.html @@ -0,0 +1,65 @@ +{% extends "atlas/base.html" %} +{% load crispy_forms_tags %} +{% load static %} +{% block content %} + {% include "atlas/question_link_header.html" %} +

Update Series for Case: {{ object.title }}

+
+ {% csrf_token %} + {% crispy form form.helper %} + {{ series_formset.management_form }} +
+ {% for form in series_formset %} +
+
+ {{ form.non_field_errors }} + {{ form.errors }} + {{ form|crispy }} + {% if form.can_delete %} +
+ {{ form.DELETE }} +
+ {% endif %} +
+
+ {% endfor %} + + + + + + + +{% endblock %} \ No newline at end of file diff --git a/atlas/templates/atlas/collection_viva.html b/atlas/templates/atlas/collection_viva.html index 26059e5e..f53b0f5f 100644 --- a/atlas/templates/atlas/collection_viva.html +++ b/atlas/templates/atlas/collection_viva.html @@ -39,6 +39,7 @@ Series {{ forloop.counter }}:
+ test {{series.get_block}}
{% comment %}