From 6e3ab7de4199ff613ddf5ba3aaa505be3b0e8ff6 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 16 Feb 2026 14:08:37 +0000 Subject: [PATCH] Add procedures filter to NormalCaseFilter; update fields and queryset handling --- atlas/filters.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/atlas/filters.py b/atlas/filters.py index a873bbd2..8763221c 100755 --- a/atlas/filters.py +++ b/atlas/filters.py @@ -11,6 +11,7 @@ from .models import ( Finding, PathologicalProcess, Presentation, + Procedure, QuestionSchema, Series, Structure, @@ -437,6 +438,7 @@ class NormalCaseFilter(django_filters.FilterSet): """ examination = django_filters.ModelChoiceFilter(queryset=Series.objects.none()) modality = django_filters.ModelChoiceFilter(queryset=Series.objects.none()) + procedures = django_filters.ModelMultipleChoiceFilter(field_name="case__procedures", queryset=Procedure.objects.all(), label="Procedure") # Accept min/max as years in the UI but filter against the canonical # `age_days` field by converting years -> days. # Numeric min/max values entered by the user (interpreted via `age_unit`) @@ -452,7 +454,7 @@ class NormalCaseFilter(django_filters.FilterSet): class Meta: model = NormalCase - fields = ("examination", "modality", "age_days") + fields = ("examination", "modality", "procedures", "age_days") def __init__(self, data=None, queryset=None, prefix=None, strict=None, user=None, request=None): # Use the global Examination and Modality querysets from the Series model @@ -479,8 +481,10 @@ class NormalCaseFilter(django_filters.FilterSet): try: exam_ids = nc_qs.values_list("examination_id", flat=True) mod_ids = nc_qs.values_list("modality_id", flat=True) + proc_ids = nc_qs.values_list("case__procedures", flat=True) self.base_filters.get("examination").queryset = Examination.objects.filter(id__in=exam_ids).distinct() self.base_filters.get("modality").queryset = Modality.objects.filter(id__in=mod_ids).distinct() + self.base_filters.get("procedures").queryset = Procedure.objects.filter(id__in=proc_ids).distinct() except Exception: # Fallback to all if something goes wrong self.base_filters.get("examination").queryset = Examination.objects.all() @@ -500,6 +504,7 @@ class NormalCaseFilter(django_filters.FilterSet): Div( Div("examination", css_class="col-md-3"), Div("modality", css_class="col-md-3"), + Div("procedures", css_class="col-md-3"), css_class="row g-2", ), Div(