Как добавить метаданные (количество, следующий, предыдущий) в ответ, отправленный через viewset в Django rest framework - PullRequest
0 голосов
/ 02 марта 2020

views.py

def list(self, request, *args, **kwargs):
        queryset= User.objects.all().values_list('name','designation')
        queryset=[{'name':i[0],'designation':i[1]} for i in queryset]
        serializer=getuserserializer(queryset,many=True)
        return Response(serializer.data)

serializer.py

class getuserserializer(serializers.Serializer):
    name=serializers.CharField()
    designation=serializers.CharField()

settings.py

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 100
}

Я просмотрел решения, в которых предлагалось изменить settings.py как указано выше. Тем не менее я получаю вывод, как:

{
  "result": [
    {
      "name": "Shubham Kumar",
      "designation": "SE"
    }
  ]
}

Как преобразовать его в:

{
    "count": 1,
    "next": null,
    "previous": null,
    "results": [ 
        {
          "name": "Shubham Kumar",
          "designation": "SE"
        }
      ]
 }

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

Ваша проблема в том, что вы переопределяете метод list вашего представления. И ваше представление, учитывая код, не имеет большого смысла - вы фильтруете по идентификатору, получаете доступ к двум значениям кортежа / массива, сериализуете этот результат и возвращаете его.

Если вы проверите ListModelMixin класс вы можете понять, как используется класс нумерации страниц:

def list(self, request, *args, **kwargs):
    queryset = self.filter_queryset(self.get_queryset())

    page = self.paginate_queryset(queryset)
    if page is not None:
        serializer = self.get_serializer(page, many=True)
        return self.get_paginated_response(serializer.data)

    serializer = self.get_serializer(queryset, many=True)
    return Response(serializer.data)
0 голосов
/ 02 марта 2020
class Meta:
    model = #whatever your model is
    fields = [
        'name',
        'designation',
    ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...