python - 分页不适用于我的 Django 休息框架项目,我正在使用通用视图
问题描述
我尝试了很多选项,但分页仍然不起作用。我正在使用这样的通用视图和代码:
class ListFood(generics.ListAPIView):
queryset = Food.objects.all()
serializer_class = FoodSerializer
def list(self,request):
queryset = self.get_queryset()
serializer = FoodSerializer(queryset, many=True)
return Response(serializer.data)
在 中settings.py
,我写了这个:
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS':'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 20
}
我试图修改分页样式的特定方面,例如:
class StandardResultsSetPagination(PageNumberPagination):
page_size = 100
page_size_query_param = 'page_size'
max_page_size = 1000
class ListFood(generics.ListAPIView):
queryset = Food.objects.all()
serializer_class = FoodSerializer
pagination_class = LargeResultsSetPagination
def list(self,request):
queryset = self.get_queryset()
serializer = FoodSerializer(queryset, many=True)
return Response(serializer.data)
但它仍然没有工作。
我urls.py
的是:
app_name = "lab"
urlpatterns = [
re_path('^food/$', ListFood.as_view(), name="listfood"),
]
没有错误消息,但是当我请求 URLhttp://127.0.0.1:8000/api/food/?page=1
或http://127.0.0.1:8000/api/food/?page=2
它仍然没有分页。Django 给了我 2000 条 JSON 数据。
解决方案
原始list
实现分页响应:
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)
您的类list
使用自定义实现覆盖,这就是它不返回分页响应的原因。只是不要覆盖list
.
推荐阅读
- angular - Angular 服务教程:可以在获取英雄之前添加消息吗?
- fortran - Fortran,仅使用起始索引传递数组
- javascript - 动态添加 CodeMirror:更改语言模式
- macos - gstreamer mac os 非法操作:4
- swift - 自动续订订阅 SKProduct.PeriodUnit == 7
- powerbi - 在切片器中使用不同的聚合列作为列名
- regex - 从字符串中删除所有空格
- ios - 禁用 IOS PWA 的缓存
- java - 如何克服此类方法错误:com.sun.org.apache.xml.internal.serialize.OutputFormat
- sql - 将列从 varchar 更改为整数并删除非数字字符