from django.conf import settings from django.core.paginator import Paginator from shop.models import Cart from web.settings import ANONYMOUS_CART_ID_COOKIE_NAME class FilteredQuerysetMixin: queryset = None filter_class = None def get_filter_class(self): return self.filter_class def get_queryset(self): filter_cls = self.get_filter_class() filter_obj = filter_cls(self.request.GET) filter_obj.is_valid() qs = filter_obj.filter_queryset(self.queryset) return qs class PaginatedQuerysetMixin: objects_per_page = settings.ITEMS_PER_PAGE or 20 def get_paginated_queryset(self, qs): paginator = Paginator(qs, self.objects_per_page) page = self.request.GET.get("page", 1) qs = paginator.get_page(page) return qs class CartMixin: def get_cart(self): if not self.request.user.is_authenticated: uid = self.request.COOKIES.get(ANONYMOUS_CART_ID_COOKIE_NAME) cart = Cart.objects.get(uuid=uid) else: cart = Cart.objects.filter(user=self.request.user).first() return cart