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!!
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)