Refactor NormalCase model to use age_days instead of age_years, update forms, filters, and templates accordingly for improved age handling

This commit is contained in:
Ross
2025-11-13 22:34:36 +00:00
parent 8da2dd27da
commit a2e9d5e681
9 changed files with 182 additions and 43 deletions
+19 -3
View File
@@ -294,12 +294,14 @@ class NormalCaseFilter(django_filters.FilterSet):
"""
examination = django_filters.ModelChoiceFilter(queryset=Series.objects.none())
modality = django_filters.ModelChoiceFilter(queryset=Series.objects.none())
min_age = django_filters.NumberFilter(field_name="age_years", lookup_expr="gte", label="Min age")
max_age = django_filters.NumberFilter(field_name="age_years", lookup_expr="lte", label="Max age")
# Accept min/max as years in the UI but filter against the canonical
# `age_days` field by converting years -> days.
min_age = django_filters.NumberFilter(label="Min age", method="filter_min_age")
max_age = django_filters.NumberFilter(label="Max age", method="filter_max_age")
class Meta:
model = NormalCase
fields = ("examination", "modality", "age_years")
fields = ("examination", "modality", "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
@@ -319,6 +321,20 @@ class NormalCaseFilter(django_filters.FilterSet):
super(NormalCaseFilter, self).__init__(data=data, queryset=queryset, prefix=prefix, request=request)
def filter_min_age(self, queryset, name, value):
try:
days = int(float(value) * 365.25)
except Exception:
return queryset
return queryset.filter(age_days__gte=days)
def filter_max_age(self, queryset, name, value):
try:
days = int(float(value) * 365.25)
except Exception:
return queryset
return queryset.filter(age_days__lte=days)
class QuestionSchemaFilter(django_filters.FilterSet):
class Meta:
model = QuestionSchema