Pagination does not seem to be working in Django rest api with GET method

Question:

I have been trying to paginate by json response but in vain. below are my code snippets.

views.py

This gives me the entire result. The reason i’m converting to a dataframe is that i want to do some data cleaning and minipulation.

class LogsNewAPI(APIView):
pagination_class=CustomPagination
def get(self,request, *args, **kwargs):
    envid = self.kwargs.get('envid')
    nodeid = self.kwargs.get('nodeid')
    startdatetime = self.request.GET.get('startdatetime')
    enddatetime = self.request.GET.get('enddatetime')

    filter_list=PegaAlerts.objects.filter(envId=envid, serverId=nodeid, generateddatetime__lte=enddatetime, generateddatetime__gte=startdatetime,).order_by('generateddatetime')
    df = read_frame(filter_list)
    json = df[['generateddatetime','msgid','fullLine']].to_json(orient='records',date_format='iso')
    return HttpResponse(json, content_type = 'application/json')

i have also tried as below and that gives the error:

LogsAPI requires either a ‘template_name’ attribute or a get_queryset() method that returns a QuerySet

class LogsAPI(ListView):
pagination_class=CustomPagination
def get_queryset(self):
    startdatetime = self.request.GET.get('startdatetime')
    enddatetime = self.request.GET.get('enddatetime')
    filter_list=Alerts.objects.filter(envId=self.kwargs['envid'], serverId=self.kwargs['nodeid'], generateddatetime__lte=enddatetime, generateddatetime__gte=startdatetime,).order_by('generateddatetime')
    df = read_frame(filter_list)
    json = df[[
                  'generateddatetime','msgid','fullLine']].to_json(orient='records',date_format='iso')
    return HttpResponse(json, content_type = 'application/json')

pagination.py

class CustomPagination(pagination.PageNumberPagination):
page_size = 10
page_size_query_param = 'page_size'
page_query_param = 'page_number'

urls.py

url(r'^api/v1/servers/(?P<envid>d+)/(?P<nodeid>d+)/logs/alerts/logs/$',views.LogsNewAPI.as_view(),name='LogsNewAPI'),

request from postman

http://xxxx:xxxx/api/v1/servers/1/1/logs/alerts/logs/?page_size=3&page_number=2&startdatetime=2023-01-08 10:00:00&enddatetime=2023-01-08 15:00:00

not sure if I’m missing something. Any suggestions or redirection would be of great help..Thanks!!

Asked By: anuof90

||

Answers:

Adding a serializer class helped resolve the problem.

class LogsNewAPI(GenericAPIView):
        pagination_class=CustomPagination
        serializer_class = AlertsSerializer
        def get(self,request, *args, **kwargs):
            envid = self.kwargs.get('envid')
            nodeid = self.kwargs.get('nodeid')
            startdatetime = self.request.GET.get('startdatetime')
            enddatetime = self.request.GET.get('enddatetime')
            filter_list=PegaAlerts.objects.filter(envId=envid, serverId=nodeid, generateddatetime__lte=enddatetime, generateddatetime__gte=startdatetime,).order_by('generateddatetime')
            page = self.paginate_queryset(filter_list)
            serializer = AlertsSerializer(page, many=True)
            return Response(serializer.data, status=status.HTTP_200_OK)
Answered By: anuof90