Я использую APIView
в своем проекте и пользовательской нумерации страниц, она также работает, но показывает одни и те же элементы несколько раз. Здесь я попробовал до сих пор.
views.py
class ProductByBrand(APIView):
pagination_class = LimitOffsetPaginationUpperBond
@property
def paginator(self):
if not hasattr(self, '_paginator'):
if self.pagination_class is None:
self._paginator = None
else:
self._paginator = self.pagination_class()
return self._paginator
def paginate_queryset(self, queryset):
if self.paginator is None:
return None
return self.paginator.paginate_queryset(queryset, self.request, view=self)
def get_paginated_response(self, ctx):
assert self.paginator is not None
return self.paginator.get_paginated_response(ctx)
def get(self, request, slug, brand, format='json'):
pid = Category.objects.get(slug=slug)
data = Category.objects.filter(parent_id=pid)
data_categories = []
for category in data:
data_categories += Category.objects.filter(parent_id=category.id)
all_product = []
for data_category in data_categories:
all_product += Product.objects.filter(category_id=data_category.id, brand=brand)
print(all_product)
ctx = []
for product in all_product:
str = settings.MEDIA_URL + product.image.name
ctx.append({
'id': product.id,
'name': product.name,
'slug': product.slug,
'brand': product.brand_id,
'image': str,
'price': product.price,
'rating': product.rating,
'discount': product.discount
})
queryset = Product.objects.all()
page = self.paginate_queryset(queryset)
if page is not None:
return self.get_paginated_response(ctx)
, чтобы быть более точным, я выбираю марку в разделе категории, чтобы отфильтровать товары, относящиеся к этой категории. Например: у меня есть два продукта
, как видно из категории electronics
, у него есть два продукта, связанных с брендом, идентификатор которого 3 . В этом случае у меня есть только два продукта, а не четыре. Но это дает мне 4 одинаковых продукта вместо 2, как вы можете видеть на картинке выше. Как я могу решить эту проблему? Заранее спасибо!