Files
shoppy/web/mixins.py
T
2025-01-20 11:40:07 +01:00

69 lines
1.8 KiB
Python

from django.conf import settings
from django.core.paginator import Paginator
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 StylingMixin:
placeholder_for_field = {}
styled_fields = []
classes = {
"my-2",
"bg-gray-50",
"border",
"border-gray-300",
"text-gray-900",
"sm:text-sm rounded-lg",
"focus:ring-primary-600",
"focus:border-primary-600",
"block",
"w-full",
"p-2.5",
"dark:bg-gray-700",
"dark:border-gray-600",
"dark:placeholder-gray-400",
"dark:text-white",
"dark:focus:ring-primary-500",
"dark:focus:border-primary-500",
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.style_fields()
def style_fields(self):
for field_name in self.styled_fields:
field = self.fields[field_name]
field.required = True
field.widget.attrs.update({"class": " ".join(self.classes)})
if self.placeholder_for_field.get(field_name):
field.widget.attrs.update(
{
"placeholder": self.placeholder_for_field.get(field_name),
}
)