From 33e557e693d25b7b0b42b2bdf7114427ef8cfd97 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Mon, 16 Jun 2025 18:08:31 +0300 Subject: [PATCH] Features: 1) Add `children_present` BooleanFilter to CategoryFilter for filtering presence of children; Fixes: None; Extra: 1) Implement `filter_children_presence` method to support the new filter; --- core/filters.py | 8 ++++++++ 1 file changed, 8 insertions(+) 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)