Features: 1) Add filter_parent_uuid method in CategoryFilter to handle parent UUID filtering; 2) Expand CategoryFilter fields to include parent_uuid and slug.
Fixes: 1) Update `resolve_categories` in schema to include all categories in query. Extra: 1) Add missing `uuid` import in `filters.py`; 2) Improve handling for null and invalid parent UUID values in `filter_parent_uuid`.
This commit is contained in:
parent
eb48c78b9d
commit
7520184e56
2 changed files with 19 additions and 3 deletions
|
|
@ -1,5 +1,6 @@
|
|||
import json
|
||||
import logging
|
||||
import uuid
|
||||
|
||||
from django.db.models import Avg, FloatField, OuterRef, Q, Subquery, Value
|
||||
from django.db.models.functions import Coalesce
|
||||
|
|
@ -251,7 +252,7 @@ class WishlistFilter(FilterSet):
|
|||
class CategoryFilter(FilterSet):
|
||||
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact")
|
||||
name = CharFilter(field_name="name", lookup_expr="icontains")
|
||||
parent_uuid = UUIDFilter(field_name="parent__uuid", lookup_expr="exact")
|
||||
parent_uuid = CharFilter(method="filter_parent_uuid")
|
||||
slug = CharFilter(field_name="slug", lookup_expr="exact")
|
||||
|
||||
order_by = OrderingFilter(
|
||||
|
|
@ -264,7 +265,22 @@ class CategoryFilter(FilterSet):
|
|||
|
||||
class Meta:
|
||||
model = Category
|
||||
fields = ["uuid", "name"]
|
||||
fields = ["uuid", "name", "parent_uuid", "slug"]
|
||||
|
||||
def filter_parent_uuid(self, queryset, name, value):
|
||||
"""
|
||||
If ?parent_uuid= or ?parent_uuid=null, return items with parent=None.
|
||||
Otherwise treat `value` as a real UUID and filter parent__uuid=value.
|
||||
"""
|
||||
if value in ("", "null", "None"):
|
||||
return queryset.filter(parent=None)
|
||||
|
||||
try:
|
||||
uuid_val = uuid.UUID(value)
|
||||
except (ValueError, TypeError):
|
||||
return queryset
|
||||
|
||||
return queryset.filter(parent__uuid=uuid_val)
|
||||
|
||||
|
||||
class BrandFilter(FilterSet):
|
||||
|
|
|
|||
|
|
@ -184,7 +184,7 @@ class Query(ObjectType):
|
|||
|
||||
@staticmethod
|
||||
def resolve_categories(_parent, info, **kwargs):
|
||||
categories = Category.objects.filter(parent=None)
|
||||
categories = Category.objects.all()
|
||||
if info.context.user.has_perm("core.view_category"):
|
||||
return categories
|
||||
return categories.filter(is_active=True)
|
||||
|
|
|
|||
Loading…
Reference in a new issue