diff --git a/engine/core/models.py b/engine/core/models.py index 0ad745aa..55218d23 100644 --- a/engine/core/models.py +++ b/engine/core/models.py @@ -402,7 +402,8 @@ class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel): @cached_property def filterable_attributes(self) -> list[FilterableAttribute]: rows = ( - AttributeValue.objects.annotate(value_length=Length("value")) + AttributeValue.objects.filter(is_active=True) + .annotate(value_length=Length("value")) .filter( product__is_active=True, product__category=self, @@ -726,12 +727,17 @@ class Product(ExportModelOperationsMixin("product"), NiceModel): @property def price(self: Self) -> float: - stock = self.stocks.only("price").order_by("-price").first() + stock = ( + self.stocks.filter(is_active=True).only("price").order_by("-price").first() + ) return round(stock.price, 2) if stock else 0.0 @cached_property def quantity(self) -> int: - return self.stocks.aggregate(total=Sum("quantity"))["total"] or 0 + return ( + self.stocks.filter(is_active=True).aggregate(total=Sum("quantity"))["total"] + or 0 + ) @property def total_orders(self): diff --git a/engine/core/viewsets.py b/engine/core/viewsets.py index d0519a17..c783dd0c 100644 --- a/engine/core/viewsets.py +++ b/engine/core/viewsets.py @@ -383,16 +383,18 @@ class BrandViewSet(SchonViewSet): return obj def get_queryset(self): - queryset = Brand.objects.all() - - if self.request.user.has_perm("view_category"): # ty:ignore[possibly-missing-attribute] - queryset = queryset.prefetch_related("categories") - else: - queryset = queryset.prefetch_related( + qs = super().get_queryset() + if self.request.user.has_perm("core.view_brand"): # ty:ignore[possibly-missing-attribute] + if self.request.user.has_perm("core.view_brand"): # ty:ignore[possibly-missing-attribute] + return qs.prefetch_related("categories") + return qs.prefetch_related( Prefetch("categories", queryset=Category.objects.filter(is_active=True)) ) - - return queryset + if self.request.user.has_perm("core.view_category"): # ty:ignore[possibly-missing-attribute] + return qs.filter(is_active=True).prefetch_related("categories") + return qs.filter(is_active=True).prefetch_related( + Prefetch("categories", queryset=Category.objects.filter(is_active=True)) + ) # noinspection PyUnusedLocal @action(