Files
shoppy/web/mixins.py
T
2024-11-27 17:07:03 +01:00

41 lines
1.1 KiB
Python

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