Replace legacy primary filter with is_canonical and add synonym filter in ConditionFilter
This commit is contained in:
+21
-3
@@ -164,13 +164,16 @@ class SeriesFilter(django_filters.FilterSet):
|
|||||||
|
|
||||||
|
|
||||||
class ConditionFilter(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:
|
class Meta:
|
||||||
model = Condition
|
model = Condition
|
||||||
fields = {
|
fields = {
|
||||||
"name": ["icontains"],
|
"name": ["icontains"],
|
||||||
"primary": ["exact"],
|
|
||||||
"synonym": ["exact"],
|
|
||||||
#"parent": ["exact"],
|
|
||||||
"subspecialty": ["exact"],
|
"subspecialty": ["exact"],
|
||||||
"rcr_curriculum": ["exact"],
|
"rcr_curriculum": ["exact"],
|
||||||
}
|
}
|
||||||
@@ -189,6 +192,21 @@ class ConditionFilter(django_filters.FilterSet):
|
|||||||
)
|
)
|
||||||
pass
|
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 FindingFilter(django_filters.FilterSet):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|||||||
Reference in New Issue
Block a user