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), ])) +