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

Popular posts from this blog

get url and add instance to a model with prefilled foreign key :django admin -

android - Keyboard hides my half of edit-text and button below it even in scroll view -

css - Make div keyboard-scrollable in jQuery Mobile? -