Django Rest Framework - Конвертируйте постраничный ответ - PullRequest
0 голосов
/ 18 марта 2020

Я хочу обернуть постраничный ответ в конверт. Результат должен выглядеть следующим образом.

{
    "data": ["datum 1", "datum 2", "datum 3"],
    "meta": {
        "some": "meta",
        "data": "foo",
    },
    "page": {
        "total": 12345,
        "count": 3,
        "from": 3,
        "to": 6,
        "next": "http://example.com?page=2",
        "prev": "http://example.com?page=0",
    }
}

Пользовательский формат страницы может быть получен путем наследования от PageNumberPagination. Мой вопрос о передаче метаданных. Я не вижу способа передать его на нумерацию страниц, за исключением какой-либо формы внутриполосной сигнализации. Есть ли чистый (э) способ сделать это?

1 Ответ

1 голос
/ 18 марта 2020
class CustomPagination(pagination.PageNumberPagination):
    <b>view = None</b>

    def paginate_queryset(self, queryset, request, view=None):
        <b>self.view = view</b>
        return super().paginate_queryset(queryset, request, view)

    <b>def get_meta(self, data=None, **meta):
        return {
            'data_from_view': self.view.__class__.__name__,
            'static_data': settings.ROOT_URLCONF,
            'len_per_page': len(data),
            'dynamic_data_on_thy_fly': meta
        }</b>

    def get_paginated_response(self, data, **meta):
        return Response({
            'links': {
                'next': self.get_next_link(),
                'previous': self.get_previous_link()
            },
            <b>'meta': self.get_meta(data, **meta),</b>
            'count': self.page.paginator.count,
            'results': data
        })
...