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.
This commit is contained in:
Egor Pavlovich Gorbunov 2025-06-17 09:58:18 +03:00
parent ddad857015
commit f66a6b0cb6

View file

@ -322,6 +322,7 @@ class CategoryFilter(FilterSet):
name = CharFilter(field_name="name", lookup_expr="icontains", label=_("Name")) name = CharFilter(field_name="name", lookup_expr="icontains", label=_("Name"))
parent_uuid = CharFilter(method="filter_parent_uuid", label=_("Parent")) parent_uuid = CharFilter(method="filter_parent_uuid", label=_("Parent"))
slug = CharFilter(field_name="slug", lookup_expr="exact", label=_("Slug")) 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")) tags = CaseInsensitiveListFilter(field_name="tags__tag_name", label=_("Tags"))
level = NumberFilter(field_name="level", lookup_expr="exact", label=_("Level")) level = NumberFilter(field_name="level", lookup_expr="exact", label=_("Level"))
@ -335,7 +336,12 @@ class CategoryFilter(FilterSet):
class Meta: class Meta:
model = Category 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): def filter_parent_uuid(self, queryset, _name, value):
if value in ("", "null", "None"): if value in ("", "null", "None"):