DRF 自定义分页无法正常工作
DRF Custom Pagination not working properly
最近我在使用 drf 分页 class,PageNumberPagination.I 可能遇到也可能没有遇到一个奇怪的错误。
官方文档提到,要覆盖 PageNumberPagination 的页面大小,我们必须创建一个自定义分页器来覆盖页面大小配置,如下所示
class StandardResultsSetPagination(PageNumberPagination):
page_size = 100
page_size_query_param = 'page_size'
max_page_size = 1000
class BillingRecordsView(generics.ListAPIView):
queryset = Billing.objects.all()
serializer_class = BillingRecordsSerializer
pagination_class = LargeResultsSetPagination
但是当我尝试做同样的事情时,自定义分页器使用默认设置 100
这是我使用的片段
class StandardResultsSetPagination(PageNumberPagination):
page_size = 10
page_size_query_param = 'page_size'
max_page_size = 100
class TrendingClassesView(ListAPIView):
pagination_class = StandardResultsSetPagination
serializer_class = BaseClassTileSerializer
queryset = BaseClass.objects.all()
一会儿代码工作正常但是在调整页面大小一段时间后分页器停止工作,
我必须执行类似下面的操作才能使页面大小正常工作
class StandardResultsSetPagination(PageNumberPagination):
page_size = 10
page_size_query_param = 'page_size'
max_page_size = 100
def get_page_size(self, request):
return 10
这是我的休息框架设置
REST_FRAMEWORK = {
'UPLOADED_FILES_USE_URL':
True,
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.MultiPartParser',
'rest_framework.parsers.FileUploadParser',
'rest_framework.parsers.FormParser',
],
"TIME_FORMAT":
"%I:%M %p",
"TIME_INPUT_FORMATS": ["%I:%M %p", "%H:%M"],
}
我想我可能做错了什么,但我找不到错误。
我没有发现自定义分页有任何错误,尽管您不必重写 get 方法。
尝试在设置中设置默认分页 class。
REST_FRAMEWORK = {
'UPLOADED_FILES_USE_URL':
True,
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.MultiPartParser',
'rest_framework.parsers.FileUploadParser',
'rest_framework.parsers.FormParser',
],
"TIME_FORMAT":
"%I:%M %p",
"TIME_INPUT_FORMATS": ["%I:%M %p", "%H:%M"],
'DEFAULT_PAGINATION_CLASS': 'your.path.StandardResultsSetPagination'
}
文档中也提到了它:DRF pagination
PS:请同时检查查询集和视图集,错误可能来自您正在获取结果的查询。
是的,这可能是愚蠢的,但无论如何我发现了问题。问题不在于给定的两个视图,所以我没有提供正确的信息 here.After 写上面的评论我开始寻找如果我在其他地方覆盖了页面大小
所以我找到了这个
class FocusView(ListAPIView):
authentication_classes = (JWTAuthentication, TokenAuthentication,
SessionAuthentication, BasicAuthentication)
permission_classes = (IsAuthenticated, IsCustomer, )
renderer_classes = (
JSONRenderer,
)
pagination_class = StandardResultsSetPagination
serializer_class = FocusTileSerializer
pagination_class.page_size=100 #this line was the culprit here
这个视图就在我上面使用的视图下面,所以当服务器重新加载时 python 加载所有模块和文件所以这个视图覆盖了自定义 [=16= 的 page_size ] 真的不知道它是否应该这样做,但它肯定应该在文档中提到,或者也许我错过了它。
最近我在使用 drf 分页 class,PageNumberPagination.I 可能遇到也可能没有遇到一个奇怪的错误。 官方文档提到,要覆盖 PageNumberPagination 的页面大小,我们必须创建一个自定义分页器来覆盖页面大小配置,如下所示
class StandardResultsSetPagination(PageNumberPagination):
page_size = 100
page_size_query_param = 'page_size'
max_page_size = 1000
class BillingRecordsView(generics.ListAPIView):
queryset = Billing.objects.all()
serializer_class = BillingRecordsSerializer
pagination_class = LargeResultsSetPagination
但是当我尝试做同样的事情时,自定义分页器使用默认设置 100 这是我使用的片段
class StandardResultsSetPagination(PageNumberPagination):
page_size = 10
page_size_query_param = 'page_size'
max_page_size = 100
class TrendingClassesView(ListAPIView):
pagination_class = StandardResultsSetPagination
serializer_class = BaseClassTileSerializer
queryset = BaseClass.objects.all()
一会儿代码工作正常但是在调整页面大小一段时间后分页器停止工作, 我必须执行类似下面的操作才能使页面大小正常工作
class StandardResultsSetPagination(PageNumberPagination):
page_size = 10
page_size_query_param = 'page_size'
max_page_size = 100
def get_page_size(self, request):
return 10
这是我的休息框架设置
REST_FRAMEWORK = {
'UPLOADED_FILES_USE_URL':
True,
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.MultiPartParser',
'rest_framework.parsers.FileUploadParser',
'rest_framework.parsers.FormParser',
],
"TIME_FORMAT":
"%I:%M %p",
"TIME_INPUT_FORMATS": ["%I:%M %p", "%H:%M"],
}
我想我可能做错了什么,但我找不到错误。
我没有发现自定义分页有任何错误,尽管您不必重写 get 方法。 尝试在设置中设置默认分页 class。
REST_FRAMEWORK = {
'UPLOADED_FILES_USE_URL':
True,
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.MultiPartParser',
'rest_framework.parsers.FileUploadParser',
'rest_framework.parsers.FormParser',
],
"TIME_FORMAT":
"%I:%M %p",
"TIME_INPUT_FORMATS": ["%I:%M %p", "%H:%M"],
'DEFAULT_PAGINATION_CLASS': 'your.path.StandardResultsSetPagination'
}
文档中也提到了它:DRF pagination
PS:请同时检查查询集和视图集,错误可能来自您正在获取结果的查询。
是的,这可能是愚蠢的,但无论如何我发现了问题。问题不在于给定的两个视图,所以我没有提供正确的信息 here.After 写上面的评论我开始寻找如果我在其他地方覆盖了页面大小 所以我找到了这个
class FocusView(ListAPIView):
authentication_classes = (JWTAuthentication, TokenAuthentication,
SessionAuthentication, BasicAuthentication)
permission_classes = (IsAuthenticated, IsCustomer, )
renderer_classes = (
JSONRenderer,
)
pagination_class = StandardResultsSetPagination
serializer_class = FocusTileSerializer
pagination_class.page_size=100 #this line was the culprit here
这个视图就在我上面使用的视图下面,所以当服务器重新加载时 python 加载所有模块和文件所以这个视图覆盖了自定义 [=16= 的 page_size ] 真的不知道它是否应该这样做,但它肯定应该在文档中提到,或者也许我错过了它。