From f66a6b0cb64c33f9c06fdb460c8639021893532a Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Tue, 17 Jun 2025 09:58:18 +0300 Subject: [PATCH] Features: 1) Add `whole` BooleanFilter to filter whole categories in `CategoryFilter`. Fixes: None; Extra: 1) Update `CategoryFilter.Meta.fields` to include `whole`; 2) Add `filter_whole_categories` method for filtering logic. --- core/filters.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/core/filters.py b/core/filters.py index f0474d93..834ca317 100644 --- a/core/filters.py +++ b/core/filters.py @@ -322,6 +322,7 @@ class CategoryFilter(FilterSet): name = CharFilter(field_name="name", lookup_expr="icontains", label=_("Name")) parent_uuid = CharFilter(method="filter_parent_uuid", label=_("Parent")) slug = CharFilter(field_name="slug", lookup_expr="exact", label=_("Slug")) + whole = BooleanFilter(field_name="whole", label=_("Whole category"), method="filter_whole_categories") tags = CaseInsensitiveListFilter(field_name="tags__tag_name", label=_("Tags")) level = NumberFilter(field_name="level", lookup_expr="exact", label=_("Level")) @@ -335,7 +336,12 @@ class CategoryFilter(FilterSet): class Meta: model = Category - fields = ["uuid", "name", "parent_uuid", "slug", "tags", "level", "order_by"] + fields = ["uuid", "name", "parent_uuid", "slug", "tags", "level", "order_by", "whole"] + + def filter_whole_categories(self, queryset, _name, value): + if value: + return queryset.filter(product_set__isnull=False).distinct() + return queryset.filter(product_set__isnull=True).distinct() def filter_parent_uuid(self, queryset, _name, value): if value in ("", "null", "None"):