Как добавить пагинацию к данным, полученным от google big query, в django rest framework

У меня есть некоторые данные, полученные от google big query, и я пытаюсь сделать пагинацию на эти данные в django rest frame work. Также я не использую сериализаторы для достижения правильного вывода. Есть ли какой-нибудь идеальный способ добавить пагинацию, как я упоминал внизу?

class CashFlowList(generics.ListAPIView):
    permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
    pagination_class = PageNumberPagination

    @staticmethod
    def cash_flow_list(self, rows, info, *args, **kwargs):
        data = {'invoices': rows}
        message = {'info': info, 'data': data}
        return message

    def get(self, request):
    
        try:
   
  
            dataset = 'dummy_dataset'

    

            get_cashflow_query = f" SELECT  ref_no AS invoice_number, party_name AS customer_name,credit_amount, pending_amount," \
                             f" DATE_ADD(date, INTERVAL credit_period DAY) AS due_date, DATE_DIFF(CURRENT_TIMESTAMP(), " \
                             f" DATE_ADD(date, INTERVAL credit_period DAY) , DAY) AS due_days FROM {dataset}.{CASH_FLOW_TABLE}"

            cashflow_list_data = cashflow_summary_obj.get_cash_values(get_cashflow_query)
            data = []
            for row in cashflow_list_data:
                data.append({'invoice_number':row[0], 'customer_name': row[1], 'credit_amount': row[2], 
                        'pending_amount': row[3], 'due_date': row[4], 'due_days': row[5]})
            info = {'status_code': '131', 'status': 'SUCCESS', 'message': "cash flow data list."}
            message = self.cash_flow_list(self, info=info, rows=data)
        except NotFound:
            info = {'status_code': '711', 'status': 'FAIL',
                'message': 'Unknown dataset, Please call Administrator...!'}
            data = {'total_receivables': 0, 'total_pending_receivables': 0, 'customers_overdue': 0}
            message = self.cash_flow_list(self, info=info, rows=data)
        return Response(data=message, status=status.HTTP_200_OK)

Это файл views.py и текущий вывод выглядит следующим образом:

{
"info": {
    "status_code": "131",
    "status": "SUCCESS",
    "message": "cash flow data list."
},
"data": {
    "invoices": [
        {
            "invoice_number": 3,
            "customer_name": "Philip",
            "credit_amount": 25000,
            "pending_amount": 7760,
            "due_date": "2022-12-15T00:00:00Z",
            "due_days": 33
        },
        {
            "invoice_number": 1,
            "customer_name": "Charles",
            "credit_amount": 60000,
            "pending_amount": 45451,
            "due_date": "2022-12-31T00:00:00Z",
            "due_days": 17
        },
        {
            "invoice_number": 4,
            "customer_name": "John",
            "credit_amount": 60000,
            "pending_amount": 45451,
            "due_date": "2023-01-19T00:00:00Z",
            "due_days": -1
        },
        {
            "invoice_number": 5,
            "customer_name": "Jack",
            "credit_amount": 60000,
            "pending_amount": 50000,
            "due_date": "2023-01-23T00:00:00Z",
            "due_days": -5
        },
        {
            "invoice_number": 2,
            "customer_name": "Will",
            "credit_amount": 90000,
            "pending_amount": 89020,
            "due_date": "2023-01-01T00:00:00Z",
            "due_days": 16
        }
    ]
}

}

И ожидаемый результат

    {
"info": {
    "status_code": "131",
    "status": "SUCCESS",
    "message": "cash flow data list."
},
"data": {
    "count":5
    "previous":
    "next":
    "invoices": [
        {
            "invoice_number": 3,
            "customer_name": "Philip",
            "credit_amount": 25000,
            "pending_amount": 7760,
            "due_date": "2022-12-15T00:00:00Z",
            "due_days": 33
        },
        {
            "invoice_number": 1,
            "customer_name": "Charles",
            "credit_amount": 60000,
            "pending_amount": 45451,
            "due_date": "2022-12-31T00:00:00Z",
            "due_days": 17
        },
        {
            "invoice_number": 4,
            "customer_name": "John",
            "credit_amount": 60000,
            "pending_amount": 45451,
            "due_date": "2023-01-19T00:00:00Z",
            "due_days": -1
        },
        {
            "invoice_number": 5,
            "customer_name": "Jack",
            "credit_amount": 60000,
            "pending_amount": 50000,
            "due_date": "2023-01-23T00:00:00Z",
            "due_days": -5
        },
        {
            "invoice_number": 2,
            "customer_name": "Will",
            "credit_amount": 90000,
            "pending_amount": 89020,
            "due_date": "2023-01-01T00:00:00Z",
            "due_days": 16
        }
    ]
}

}

Есть ли какой-нибудь идеальный способ добиться такого результата?

Я бы предложил вам наследовать класс "generics.GenericAPIView" и в методе "get" инстанцировать класс pagination.

Что-то вроде этого:
paginator = PageNumberPagination()
result_page = paginator.paginate_queryset(queryset, request)

А затем вы можете использовать класс сериализатора следующим образом:
serializer = serializer(result_page, many=True)

Если вы все еще не хотите использовать сериализаторы для достижения правильного вывода, попробуйте обойти это.

Вернуться на верх