gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:08:54 24 4
gpt4 key购买 nike

我刚刚更新到 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com