From 8a871d6332cd647992934b5095e38e03266d2154 Mon Sep 17 00:00:00 2001 From: Ross Date: Sun, 23 Nov 2025 23:29:39 +0000 Subject: [PATCH] Replace legacy `primary` filter with `is_canonical` and add `synonym` filter in ConditionFilter --- atlas/filters.py | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/atlas/filters.py b/atlas/filters.py index 1da6b22f..a86ed2b8 100755 --- a/atlas/filters.py +++ b/atlas/filters.py @@ -164,13 +164,16 @@ class SeriesFilter(django_filters.FilterSet): class ConditionFilter(django_filters.FilterSet): + # Replace legacy `primary` filter with `is_canonical` and provide a + # `synonym` filter which will filter by the canonical group of the + # selected condition. + is_canonical = django_filters.BooleanFilter(method="filter_is_canonical", label="Canonical") + synonym = django_filters.ModelChoiceFilter(queryset=Condition.objects.all(), method="filter_synonym", label="Synonym group") + class Meta: model = Condition fields = { "name": ["icontains"], - "primary": ["exact"], - "synonym": ["exact"], - #"parent": ["exact"], "subspecialty": ["exact"], "rcr_curriculum": ["exact"], } @@ -189,6 +192,21 @@ class ConditionFilter(django_filters.FilterSet): ) pass + def filter_is_canonical(self, queryset, name, value): + if value in (True, "True", "true", 1, "1"): + return queryset.filter(canonical__isnull=True) + if value in (False, "False", "false", 0, "0"): + return queryset.filter(canonical__isnull=False) + return queryset + + def filter_synonym(self, queryset, name, value): + # value is a Condition instance selected in the filter. Return all + # Conditions that belong to the same canonical group as `value`. + if not value: + return queryset + master = value.canonical if value.canonical else value + return queryset.filter(Q(canonical=master) | Q(pk=master.pk)) + class FindingFilter(django_filters.FilterSet): class Meta: