Как сделать пагинацию для категорий на django
В общем я начинающий в Джанго. Сделал пагинацию для продукта, а для категории не пойму как, помогите решить задачу!
class BaseView(CartMixin, TemplateView):
template_name = 'base.html'
def get(self, request, *args, **kwargs):
categories = Category.objects.all()
products = Product.objects.all()
paginator = Paginator(products, 12)
page = request.GET.get('page')
try:
products = paginator.page(page)
except PageNotAnInteger:
products = paginator.page(1)
except EmptyPage:
products = paginator.page(paginator.num_pages)
context = {
'page': page,
'categories': categories,
'products': products,
'cart': self.cart
}
return render(request, 'base.html', context)
class CategoryDetailView(CartMixin, DetailView):
model = Category
queryset = Category.objects.all()
context_object_name = 'category'
template_name = 'category_detail.html'
slug_url_kwarg = 'slug'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
query = self.request.GET.get('search')
category = self.get_object()
context['cart'] = self.cart
context['categories'] = self.model.objects.all()
if not query and not self.request.GET:
context['category_products'] = category.product_set.all()
return context
if query:
products = category.product_set.filter(Q(title__icontains=query))
context['category_products'] = products
return context
url_kwargs = {}
for item in self.request.GET:
if len(self.request.GET.getlist(item)) > 1:
url_kwargs[item] = self.request.GET.getlist(item)
else:
url_kwargs[item] = self.request.GET.get(item)
q_condition_queries = Q()
for key, value in url_kwargs.items():
if isinstance(value, list):
q_condition_queries.add(Q(**{'value__in': value}), Q.OR)
else:
q_condition_queries.add(Q(**{'value': value}), Q.OR)
pf = ProductFeatures.objects.filter(
q_condition_queries
).prefetch_related('product', 'feature').values('product_id')
products = Product.objects.filter(id__in=[pf_['product_id'] for pf_ in pf])
context['category_products'] = products
return context