首页 > 解决方案 > 如何在我的 Django Rest Framework 分页中包含一个 Count 来计算总行数?

问题描述

我已经使用 Django Rest Framework 在 Python 中编写了一个代码,以从数据库(MySql)中获取数据并使用分页(PageNumberPagination)在浏览器中查看它。它工作正常,但问题是“计数”没有出现在视图中。我想显示计数的总行数。我得到这样的回应:

GET /fetchdata/?page=1&per_page=10

HTTP 200 OK
Allow: GET, OPTIONS, POST
Content-Type: application/json
Vary: Accept
[
    {
        "id": 53,
        "first_name": "Rounak",
    },
    {
        "id": 54,
        "first_name": "Rounak",   
    },
]

但我想要这样的回应。

HTTP 200 OK
{
    "count": 1023
    "next": "https://api.example.org/persons/?page=2&per_page=10",
    "previous": null,
    "results": [
       …
    ]
}

下面是我的代码,请给我一些建议。

视图.py

from rest_framework.pagination import PageNumberPagination
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from .pagination import StandardResultsSetPagination

@api_view(['GET','POST'])

def index(request):

  if request.method=='GET':

    all_dataobj=fetchdata.objects.all()

    paginator = StandardResultsSetPagination()
    result_page = paginator.paginate_queryset(all_dataobj, request)

    pserializer=fetchdataSerializers(result_page,many=True)

    return Response(pserializer.data,status=status.HTTP_201_CREATED)

  elif request.method=='POST':

    serializer=fetchdataSerializers(data=request.data)

  if serializer.is_valid():

    serializer.save()

  return Response(serializer.data,status=status.HTTP_201_CREATED)
  return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST) 

分页.py

from rest_framework import pagination

class StandardResultsSetPagination(pagination.PageNumberPagination):

  page_size = 10
  page_query_param = 'page'
  page_size_query_param = 'per_page'
  max_page_size = 1000

设置.py

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

标签: python-3.xdjango-rest-frameworkdjango-pagination

解决方案


推荐阅读