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"):