diff --git a/core/filters.py b/core/filters.py index 8549dc77..425a84ae 100644 --- a/core/filters.py +++ b/core/filters.py @@ -323,6 +323,8 @@ class CategoryFilter(FilterSet): parent_uuid = CharFilter(method="filter_parent_uuid", label=_("Parent")) slug = CharFilter(field_name="slug", lookup_expr="exact", label=_("Slug")) tags = CaseInsensitiveListFilter(field_name="tags__tag_name", label=_("Tags")) + children_present = BooleanFilter(method="filter_children_presence", field_name="children_present", + label=_("children present")) order_by = OrderingFilter( fields=( @@ -336,6 +338,12 @@ class CategoryFilter(FilterSet): model = Category fields = ["uuid", "name", "parent_uuid", "slug", "tags"] + def filter_children_presence(self, queryset, _name, value): + if value: + return queryset.filter(children__isnull=False) + else: + return queryset.filter(children__isnull=True) + def filter_parent_uuid(self, queryset, _name, value): if value in ("", "null", "None"): return queryset.filter(parent=None)