select id,(select count(*) from book where book.user_id= user.id) as count,name from user;
在 django 分页最后会变成
select count(*) from (
select id,(select count(*) from book where book.user_id= user.id) as count,name from user)
优化,在 restframework 中分页, 去掉 select 字段 ,只保留 filter 条件
from rest_framework.pagination import PageNumberPagination
from django.core.paginator import Paginator
from django.utils.functional import cached_property
class Pagination(Paginator):
@cached_property
def count(self):
"""Return the total number of objects, across all pages."""
c = getattr(self.object_list, 'count', None)
if callable(c) and not inspect.isbuiltin(c) and method_has_no_args(c):
return self.object_list.values('id').count()
return len(self.object_list)
class CustomPagination(PageNumberPagination):
django_paginator_class = TicketPagination
接口中使用
class API(ModelViewSet):
pagination_class = CustomPagination
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.