From c8dbaeeb80e3cdfbd40710ab109be9a638f26fdb Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Tue, 17 Jun 2025 11:58:05 +0300 Subject: [PATCH] Features: 1) Simplify descendant product filtering in `filter_whole_categories` by replacing intermediate query with direct filters. Fixes: None; Extra: 1) Remove redundant query and clean up conditional return formatting in `filter_whole_categories`. --- core/filters.py | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/core/filters.py b/core/filters.py index 992d8970..f9c8f13a 100644 --- a/core/filters.py +++ b/core/filters.py @@ -335,27 +335,22 @@ class CategoryFilter(FilterSet): fields = ["uuid", "name", "parent_uuid", "slug", "tags", "level", "order_by", "whole"] def filter_whole_categories(self, queryset, _name, value): - descendant_cats = Category.objects.filter( - tree_id=OuterRef('tree_id'), - lft__gt=OuterRef('lft'), - rght__lt=OuterRef('rght'), - ).values('pk') - has_own_products = Exists( Product.objects.filter(category=OuterRef('pk')) ) has_desc_products = Exists( - Product.objects.filter(category_id__in=descendant_cats) + Product.objects.filter( + category__tree_id=OuterRef('tree_id'), + category__lft__gt=OuterRef('lft'), + category__rght__lt=OuterRef('rght'), + ) ) - annotated = queryset.annotate( has_products=has_own_products | has_desc_products ) - if value: return annotated.filter(has_products=True).distinct() - else: - return annotated.filter(has_products=False).distinct() + return annotated.filter(has_products=False).distinct() def filter_parent_uuid(self, queryset, _name, value): if value in ("", "null", "None"):