Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AttributeError: '' object has no attribute 'page' DRF Pagination

This is my question asked 2 days back. I used Louis Barranqueiro's answer to solve my problem. Now I want to add current page number as well as page_size in the serialized data. I know I have to customize the get_paginated_response method in PageNumberPagination class, but when I do that I get this error:

My code

 def get_paginated_response(self, data, request):
        # import pdb
        # pdb.set_trace()
        return Response(OrderedDict([
            ('next', self.get_next_link()),
            ('current', self.get_current_link()),
            ('previous', self.get_previous_link()),
            ('results', data)
        ]))

    def get_queryset(self, request):
        product_sync_ts = self.request.GET.get('product_sync_ts', None)
        if product_sync_ts:
            product = Product.objects.filter(....)
            )
            # return self.get_paginated_response(product, self.request)
            return Response(product)
        else:
            content = {'details': "Bad Request"}
            raise APIException400(request, content)


    def get(self, request, format=None):
        products = self.get_queryset(request)
        serializer = SyncedProductSerializer(instance={'products': products})
        # product = self.paginate_queryset(serializer, request)
        return self.get_paginated_response(serializer, request)
        # return self.get_paginated_response(serializer.data, request)

Error:

File "/Users/Documents/content-api/venv/lib/python2.7/site-packages/rest_framework/pagination.py", line 242, in get_next_link
    if not self.page.has_next()
AttributeError: 'PaginatedProductList' object has no attribute 'page'
like image 451
the_unknown_spirit Avatar asked Dec 18 '25 21:12

the_unknown_spirit


1 Answers

Some one might wanna try:

REST_FRAMEWORK = {
    'PAGE_SIZE': 20,
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',}

on settings.py

with a view like

class GeneralManagementAPIView(generics.ListAPIView):
    queryset = GeneralManagements.objects.all()
    permission_classes = (IsAuthenticatedOrReadOnly,)
    renderer_classes = (GeneralManagementJSONRenderer,)
    serializer_class = GeneralManagementSerializer

    def get_queryset(self):
        return GeneralManagements.objects.all()

    def list(self, request):
        queryset = self.get_queryset()
        page = self.paginate_queryset(queryset)
        print("request ", request)

        serializer_context = {'request': request}
        serializer = self.serializer_class(
            page, context=serializer_context, many=True
        )
        print("serializer ", serializer, "serializer.data", serializer.data )
        return self.get_paginated_response(serializer.data)
like image 138
diogosimao Avatar answered Dec 20 '25 12:12

diogosimao



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!