Ошибки в пользовательской нумерации страниц Django Rest Framework - PullRequest
0 голосов
/ 29 октября 2019

Я использую 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)

, чтобы быть более точным, я выбираю марку в разделе категории, чтобы отфильтровать товары, относящиеся к этой категории. Например: у меня есть два продукта

enter image description here

, как видно из категории electronics, у него есть два продукта, связанных с брендом, идентификатор которого 3 . В этом случае у меня есть только два продукта, а не четыре. Но это дает мне 4 одинаковых продукта вместо 2, как вы можете видеть на картинке выше. Как я могу решить эту проблему? Заранее спасибо!

1 Ответ

0 голосов
/ 29 октября 2019

Было бы полезно увидеть больше того, как выглядят ваши данные, но вы, вероятно, получаете дубликаты из-за двух циклов for. Это могут быть прямые запросы ORM что-то вроде этого:

def get(self, request, slug, brand, format='json'):

    pid = Category.objects.get(slug=slug)
    data = Category.objects.filter(parent_id=pid)

    data_categories = Category.objects.filter(parent__in=data)
    all_product = Product.objects.filter(category__in=data_categories, brand=brand)
    print(all_product)
    ctx = []
    for product in all_product:
    [...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...