Add procedures filter to NormalCaseFilter; update fields and queryset handling
This commit is contained in:
+6
-1
@@ -11,6 +11,7 @@ from .models import (
|
|||||||
Finding,
|
Finding,
|
||||||
PathologicalProcess,
|
PathologicalProcess,
|
||||||
Presentation,
|
Presentation,
|
||||||
|
Procedure,
|
||||||
QuestionSchema,
|
QuestionSchema,
|
||||||
Series,
|
Series,
|
||||||
Structure,
|
Structure,
|
||||||
@@ -437,6 +438,7 @@ class NormalCaseFilter(django_filters.FilterSet):
|
|||||||
"""
|
"""
|
||||||
examination = django_filters.ModelChoiceFilter(queryset=Series.objects.none())
|
examination = django_filters.ModelChoiceFilter(queryset=Series.objects.none())
|
||||||
modality = 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
|
# Accept min/max as years in the UI but filter against the canonical
|
||||||
# `age_days` field by converting years -> days.
|
# `age_days` field by converting years -> days.
|
||||||
# Numeric min/max values entered by the user (interpreted via `age_unit`)
|
# Numeric min/max values entered by the user (interpreted via `age_unit`)
|
||||||
@@ -452,7 +454,7 @@ class NormalCaseFilter(django_filters.FilterSet):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = NormalCase
|
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):
|
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
|
# Use the global Examination and Modality querysets from the Series model
|
||||||
@@ -479,8 +481,10 @@ class NormalCaseFilter(django_filters.FilterSet):
|
|||||||
try:
|
try:
|
||||||
exam_ids = nc_qs.values_list("examination_id", flat=True)
|
exam_ids = nc_qs.values_list("examination_id", flat=True)
|
||||||
mod_ids = nc_qs.values_list("modality_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("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("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:
|
except Exception:
|
||||||
# Fallback to all if something goes wrong
|
# Fallback to all if something goes wrong
|
||||||
self.base_filters.get("examination").queryset = Examination.objects.all()
|
self.base_filters.get("examination").queryset = Examination.objects.all()
|
||||||
@@ -500,6 +504,7 @@ class NormalCaseFilter(django_filters.FilterSet):
|
|||||||
Div(
|
Div(
|
||||||
Div("examination", css_class="col-md-3"),
|
Div("examination", css_class="col-md-3"),
|
||||||
Div("modality", css_class="col-md-3"),
|
Div("modality", css_class="col-md-3"),
|
||||||
|
Div("procedures", css_class="col-md-3"),
|
||||||
css_class="row g-2",
|
css_class="row g-2",
|
||||||
),
|
),
|
||||||
Div(
|
Div(
|
||||||
|
|||||||
Reference in New Issue
Block a user