From ccbb1c74f80e718497ed7271bfb04711b89dbed5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8C=BF=E5=B0=8F=E5=A4=A9?= <1638245306@qq.com> Date: Sun, 12 Feb 2023 20:13:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DBUG:=201.=E5=88=86=E9=A1=B5?= =?UTF-8?q?=E9=81=87=E5=88=B0404=E9=97=AE=E9=A2=98;2.=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E7=A6=81=E7=94=A8=E5=90=8E=E4=B8=8D=E6=98=BE=E7=A4=BA=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/dvadmin/system/views/menu.py | 6 ++-- backend/dvadmin/utils/pagination.py | 43 ++++++++++++++++++++++++++-- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/backend/dvadmin/system/views/menu.py b/backend/dvadmin/system/views/menu.py index 16d60f4..b00086a 100644 --- a/backend/dvadmin/system/views/menu.py +++ b/backend/dvadmin/system/views/menu.py @@ -185,11 +185,11 @@ class MenuViewSet(CustomModelViewSet): parent = params.get('parent', None) if params: if parent: - queryset = self.queryset.filter(status=1, parent=parent) + queryset = self.queryset.filter(parent=parent) else: - queryset = self.queryset.filter(status=1) + queryset = self.queryset else: - queryset = self.queryset.filter(status=1, parent__isnull=True) + queryset = self.queryset.filter(parent__isnull=True) queryset = self.filter_queryset(queryset) serializer = MenuSerializer(queryset, many=True, request=request) data = serializer.data diff --git a/backend/dvadmin/utils/pagination.py b/backend/dvadmin/utils/pagination.py index 1884c06..e677d6d 100644 --- a/backend/dvadmin/utils/pagination.py +++ b/backend/dvadmin/utils/pagination.py @@ -10,7 +10,7 @@ from collections import OrderedDict from django.core import paginator -from django.core.paginator import Paginator as DjangoPaginator +from django.core.paginator import Paginator as DjangoPaginator, InvalidPage from rest_framework.pagination import PageNumberPagination from rest_framework.response import Response @@ -21,12 +21,49 @@ class CustomPagination(PageNumberPagination): max_page_size = 999 django_paginator_class = DjangoPaginator + def paginate_queryset(self, queryset, request, view=None): + """ + Paginate a queryset if required, either returning a + page object, or `None` if pagination is not configured for this view. + """ + empty = True + + page_size = self.get_page_size(request) + if not page_size: + return None + + paginator = self.django_paginator_class(queryset, page_size) + page_number = request.query_params.get(self.page_query_param, 1) + if page_number in self.last_page_strings: + page_number = paginator.num_pages + + try: + self.page = paginator.page(page_number) + except InvalidPage as exc: + + # msg = self.invalid_page_message.format( + # page_number=page_number, message=str(exc) + # ) + # raise NotFound(msg) + empty = False + pass + + if paginator.num_pages > 1 and self.template is not None: + # The browsable API should display pagination controls. + self.display_page_controls = True + + self.request = request + + if not empty: + self.page = [] + + return list(self.page) def get_paginated_response(self, data): code = 2000 msg = 'success' res = { "page": int(self.get_page_number(self.request, paginator)) or 1, - "total": self.page.paginator.count, + "total": self.page.paginator.count if self.page else 0, "limit": int(self.get_page_size(self.request)) or 10, "data": data } @@ -38,6 +75,6 @@ class CustomPagination(PageNumberPagination): return Response(OrderedDict([ ('code', code), ('msg', msg), - # ('total',self.page.paginator.count), ('data', res), ])) +