def get(self, request, *args, **kwargs): query = self.get_query() sort = self.get_sort() pagination = LimitOffsetPagination() pagination.default_limit = 20 pagination.limit = pagination.get_limit(request) pagination.offset = pagination.get_offset(request) pagination.request = request body = { 'query': query, 'size': pagination.limit, 'from': pagination.offset } if sort: body['sort'] = sort # execute elasticsearch query indexer = self.get_indexer() res = indexer.search(body=body) # map back to expected format items = list(indexer.map_results(res['hits']['hits'])) pagination.count = res['hits']['total'] return pagination.get_paginated_response(items)
def get_paginated(queryset, request, to_dict, limit=10): paginator = LimitOffsetPagination() paginator.max_limit = 50 paginator.default_limit = limit paginator.offset = 0 obj_list = paginator.paginate_queryset( queryset, request ) results = to_dict(obj_list) next_link = paginator.get_next_link() prev_link = paginator.get_previous_link() if next_link: next_link = next_link.split('?')[1] if prev_link: prev_link = prev_link.split('?')[1] data = { 'results': results, 'limit': paginator.limit, 'offset': paginator.offset, 'count': paginator.count, 'next': next_link, 'prev': prev_link, } # print(json.dumps(data)) return data
def get(self, request, *args, **kwargs): query = self.get_query() sort = self.get_sort() pagination = LimitOffsetPagination() pagination.default_limit = 20 pagination.limit = pagination.get_limit(request) pagination.offset = pagination.get_offset(request) pagination.request = request body = { "track_total_hits": True, "query": query, "size": pagination.limit, "from": pagination.offset, } if sort: body["sort"] = sort # execute elasticsearch query indexer = self.get_indexer() res = indexer.search(body=body) # map back to expected format items = list(indexer.map_results(res["hits"]["hits"])) pagination.count = res["hits"]["total"]["value"] return pagination.get_paginated_response(items)