Настройка пагинации для класса Listview
Есть два класса для вывода товаров на страницу.:
class Home(ListView):
model = Product
template_name = 'landing/products.html'
context_object_name = 'products'
paginate_by = 12
def get_context_data(self, *, object_list=None, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = 'Товары'
products = Product.objects.all()
categories = Category.objects.all()
context['categories'] = categories
return context
class ProductsByCategoryView(ListView):
model = Product
context_object_name = 'products'
template_name = 'landing/products.html'
paginate_by = 2
def get_queryset(self):
self.category = Category.objects.get(pk=self.kwargs['pk'])
queryset = Product.objects.filter(category=self.category)
return queryset
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = 'Товары'
products = Product.objects.filter(availability=True).order_by('name')
if self.category:
sub_categories = self.category.get_descendants(include_self=True)
products = products.filter(category__in=sub_categories)
categories = Category.objects.all()
context['categories'] = categories
context['products'] = products
return context
Есть два класса ListView и они выводят товары в шаблон (не понял как сделать вывод товаров по категориям через один класс, но получилось через два. Если есть мысль как превратить это в один аккуратный класс, то рад был бы услышать об этом).
Вопрос в следующем:
1)Через класс Home выводится весь список товаров, добавил в шаблон пагинацию и всё работает. Через класс ProductsByCategoryView выводятся товары в зависимости от того какую категорию выбирают в списке и при этом учитывается вложенность категорий. Добавил пагинацию и она работает только для конечных потомков в категориях, а вложенность, если выбрать коренную категорию не учитывается и там нет пагинации.
2)Пробовал сделать по примеру класса Home, то на пагинация считает каждый товар отдельной страницей, и переходе на страницу присутствуют все товары. Как адекватно настроить пагинацию для вывода по категориям?