Django Rest Framework Paging -
i attempting make api return maximum of 10 per page. helps me infinite loading. api url trying looks this:
www.mysite.com/api/test/?user=5&page=1 however, not work.
i've followed official docs here without success.
i have modified 2 files, settings.py & rest_views.py.
settings.py-
rest_framework = { 'default_pagination_class': 'rest_framework.pagination.limitoffsetpagination' } rest_views.py-
from django.core.paginator import paginator ... wardrobematch = { 'user': lambda x: ('user__pk', x) } class wardrobelistview(apiview): renderer_classes = (jsonrenderer, ) paginate_by = 10 paginate_by_param = 'page_size' max_paginate_by = 100 def get(self, request, *args, **kwargs): filters = {} key, value in request.get.items(): key = key.lower() if key in wardrobematch: lookup, val = wardrobematch[key](value.lower()) filters[lookup] = val qset = ( analytic.objects .filter(like=true,**filters) .order_by('-updated',) # .distinct('product_id',) .values('product_id', 'product__name', 'product__brand', 'product__store__store_name', 'product__variation__image__image', 'product__variation__price__price',) ) return response(qset)
when using regular apiview, should call pagination api yourself, not perform pagination automatically.
i have created pagination , serializer mixim. i'm not sure best method, worked me.
class serializermixim(object): def serialize_object(self,obj): """serilize needed fields""" return notimplementederror class paginationmixim(object): _serializer = none def paginate(self,queryset,num=10): page = self.request.get.get('page') paginator = paginator(queryset, num) try: queryset = paginator.page(page) except pagenotaninteger: queryset = paginator.page(1) except emptypage: queryset = paginator.page(paginator.num_pages) count = paginator.count previous = none if not queryset.has_previous() else queryset.previous_page_number() next = none if not queryset.has_next() else queryset.next_page_number() if self._serializer: objects = self._serializer(queryset.object_list,many=true).data else: objects = [self.serialize_object(i) in queryset.object_list] data = {'count':count,'previous':previous, 'next':next,'object_list':objects} return response(data) def serialize_object(self,obj): return {'id':obj.pk} class wardrobelistview(apiview,paginationmixim,serializermixim): renderer_classes = (jsonrenderer, ) #_serializer = analyticserializer def get(self, request, *args, **kwargs): filters = {} key, value in request.get.items(): key = key.lower() if key in wardrobematch: lookup, val = wardrobematch[key](value.lower()) filters[lookup] = val qset = ( analytic.objects .filter(like=true,**filters) .order_by('-updated',) # .distinct('product_id',) return self.paginate(qset) def serialize_object(self,obj): return obj.serilized then need create propery analytic model like,
class analytic(models.model): ..... @property def serilized(self): summary = { 'id':self.product.id, 'image':self.product.name, ....... } return summary this work django rest serializers
Comments
Post a Comment