Изменение класса рендерера внутри пользовательской пагинации в django rest framework

Я использую пользовательский класс рендерера по умолчанию в settings.py. Для api я проверяю параметр запроса "page", если он существует, то делаю пагинацию результата, иначе возвращаю нормальный ответ, используя класс рендерера по умолчанию из settings.py. Но у меня есть проблема, я хочу использовать только JSONResponse renderer для пагинации

settings.py

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'app.core.renderers.CustomJSONRenderer',
        "rest_framework.renderers.JSONRenderer",
        "rest_framework.renderers.BrowsableAPIRenderer",
    ),
}

renderers.py

class CustomJSONRenderer(JSONRenderer):
    def render(self, data, accepted_media_type=None, renderer_context=None):
        status_code = renderer_context['response'].status_code
        response = {
            "success": True,
            "message": None,
            "data": data,
        }

        return super(CustomJSONRenderer, self).render(response, accepted_media_type, renderer_context)

views.py

class User_View(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = User_Serializer

    pagination_class = CustomPagination
    ### If page param exist then use pagination class else not use

pagination.py

class CustomPagination(PageNumberPagination):
    page_size_query_param = 'size'
    page_size = int(settings.PAGE_SIZE)

    def get_paginated_response(self, data):
        return Response({
            'success': True,
            'total': self.page.paginator.count,
            'page_size': self.get_page_size(self.request),
            'current_page': self.page.number,
            'last_page': self.page.paginator.num_pages,
            'data': data,
        })

неправильный ответ:

{
    "success": true,
    "message": null,
    "data": {
        "success": true,
        "total": 6,
        "page_size": 15,
        "current_page": 1,
        "last_page": 1,
        "data": [
            {
                "id": 1,
                "username": "admin",
                "permissions": []
            }
        ]
    }
}

Правильный ответ (ожидаемый):

{
        "success": true,
        "total": 6,
        "page_size": 15,
        "current_page": 1,
        "last_page": 1,
        "data": [
            {
                "id": 1,
                "username": "admin",
                "permissions": []
            }
        ]
}

Как я могу это исправить?

Я решаю проблему с обновлением класса CustomJSONRenderer

class CustomJSONRenderer(JSONRenderer):
    def render(self, data, accepted_media_type=None, renderer_context=None):
        status_code = renderer_context['response'].status_code
        request = renderer_context.pop('request')
        page = request.query_params.get('page', None)

        # Check page query params
        if page is not None:
            response = data
        else:
            response = {
                'success': True,
                'message': None,
                'data': data,
            }

        return super(CustomJSONRenderer, self).render(response, accepted_media_type, renderer_context)
Вернуться на верх