From a4e4e3cd40ea46a6c7113d6cbd2cbdeaf9165029 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Tue, 8 Jul 2025 15:11:38 +0300 Subject: [PATCH] Features: 1) Add `get_queryset` method to `BrandViewSet` for conditional prefetching of categories. Fixes: 1) Add missing import for `Prefetch` in `core/viewsets.py`. Extra: n/a. --- core/viewsets.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/core/viewsets.py b/core/viewsets.py index a70a880d..31da5b55 100644 --- a/core/viewsets.py +++ b/core/viewsets.py @@ -2,7 +2,7 @@ import logging import uuid from uuid import UUID -from django.db.models import Q +from django.db.models import Q, Prefetch from django.http import Http404 from django.shortcuts import get_object_or_404 from django.utils.decorators import method_decorator @@ -308,6 +308,19 @@ class BrandViewSet(EvibesViewSet): "list": BrandSimpleSerializer, } + def get_queryset(self): + queryset = Brand.objects.all() + + if self.request.user.has_perm("view_category"): + queryset = queryset.prefetch_related("categories") + else: + queryset = queryset.prefetch_related( + Prefetch("categories", queryset=Category.objects.filter(is_active=True)) + ) + + return queryset + + @extend_schema_view(**PRODUCT_SCHEMA) class ProductViewSet(EvibesViewSet):