python - Django Rest Framework 3.1 打破了 pagination.PaginationSerializer

标签 python django pagination django-rest-framework django-pagination

我刚刚更新到 Django Rest Framework 3.1,似乎一切都崩溃了。

在我的 serializers.py 我有以下代码:

class TaskSerializer(serializers.ModelSerializer):
    class Meta:
    model = task
    exclude = ('key', ...)

class PaginatedTaskSerializer(pagination.PaginationSerializer):
    class Meta:
        object_serializer_class = TaskSerializer

这工作得很好。现在随着 3.1 的发布,我找不到关于如何做同样事情的示例,因为 PaginationSerializer 不再存在。 我试图继承 PageNumberPagination 并使用其默认的 paginate_querysetget_paginated_response 方法,但我无法再将它们的结果序列化。

换句话说,我的问题是我不能再这样做了:

class Meta:
    object_serializer_class = TaskSerializer

有什么想法吗?

提前致谢

最佳答案

我想我想通了(至少在大多数情况下):

我们从一开始就应该使用的是:

只需使用内置分页器并将您的 views.py 更改为:

from rest_framework.pagination import PageNumberPagination

class CourseListView(AuthView):
    def get(self, request, format=None):
        """
        Returns a JSON response with a listing of course objects
        """
        courses = Course.objects.order_by('name').all()
        paginator = PageNumberPagination()
        # From the docs:
        # The paginate_queryset method is passed the initial queryset 
        # and should return an iterable object that contains only the 
        # data in the requested page.
        result_page = paginator.paginate_queryset(courses, request)
        # Now we just have to serialize the data just like you suggested.
        serializer = CourseSerializer(result_page, many=True)
        # From the docs:
        # The get_paginated_response method is passed the serialized page 
        # data and should return a Response instance.
        return paginator.get_paginated_response(serializer.data)

对于所需的页面大小,只需在 settings.py 中设置 PAGE_SIZE:

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

您现在应该已经准备好响应正文中存在的所有选项(计数、下一个和返回链接),就像更新之前一样。

但是还有一件事仍然困扰着我:我们也应该能够得到新的 html pagination controls由于某种原因,现在缺少...

我绝对可以在这方面使用更多建议...

关于python - Django Rest Framework 3.1 打破了 pagination.PaginationSerializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29128225/

相关文章:

python-tesseract OCR : get digits only

python - 如何在 Python 中获取 Linux 控制台窗口宽度

python - MPICH2 & mpi4py 安装问题

python - DRY 调用 serializer.data 不会返回模型的更新实例

python - 如何在绕过身份验证的同时实现 Django 的密码哈希?

javascript - 中继现代嵌套分页

python - Django 中更有效的分页方式

python - 编程新手,需要有关 python 中 if - elif 输入的帮助

Django - 使用 context_processor

laravel - Laravel 5 分页生成链接的问题