【问题标题】:Setting items per page in Django Tastypie Paginator在 Django Tastypie Paginator 中设置每页的项目
【发布时间】:2017-10-17 17:46:41
【问题描述】:

我正在尝试向我的 Django API 添加自定义分页器,但我不确定如何在 get_sdc_data() 中的 paginator_class 中限制每页的项目数。

class CustomApplicationSDCResource(AppMapBaseResource):
    class Meta(AppMapBaseResource.Meta):
        #import pdb;pdb.set_trace()
        queryset = Applications.objects.all()
        resource_name = 'applications'
        allowed_methods = {'get'}
        allowed_models = ['Applications']
        paginator_class = Paginator


    def prepend_urls(self):
        return [url(r"^(?P<resource_name>%s)/get_sdc_data%s$" % \
             (self._meta.resource_name, trailing_slash()), self.wrap_view('get_sdc_data'), name="api_get_sdc_data"),
       ]


    def get_sdc_data(self, request, **kwargs):
        try:
            sdc_list = []
            limit=request.GET.get('limit')
            next_item = request.GET.get('next')
            if request.GET.has_key('uaid'):
               search_uaid=request.GET.get('uaid')
               sdc_obj = Applications.objects.filter(Q(uaid__contains=search_uaid, status='Active'))
            else:
               sdc_obj = Applications.objects.all()
            exc=['vendor_name', 'ldrps_app_rto','alias_name']
            import pdb;pdb.set_trace()
            sdc_list = [model_to_dict(obj, exclude=exc) for obj in sdc_obj]
            paginator = self._meta.paginator_class(request.GET, sdc_list, resource_uri=self.get_resource_uri(), \
            limit=limit, max_limit=self._meta.max_limit, collection_name=self._meta.collection_name)
            paginated = paginator.page()
            paginated['Applications'] = paginated.pop('objects')
            return self.create_response(request, {"result" : paginated})
        except Exception as e:
            print 'Problem in getting SDC Applications data. Error is ' + str(e)

【问题讨论】:

    标签: django tastypie paginator


    【解决方案1】:

    一种方法是对过滤器查询集进行切片。

    # Pseudocode
    offset = request.get('offset', 0)
    limit = request.get('limit', 10)
    obj_queryset = Instance.objects.filter(foo=bar)[offset:limit]
    

    所以从客户端只告诉所需的分页集。 希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-08
      • 1970-01-01
      • 2014-01-22
      • 2012-04-30
      • 2013-06-02
      • 1970-01-01
      • 2013-07-11
      • 2017-08-05
      相关资源
      最近更新 更多