修复BUG: 1.分页遇到404问题;2.菜单禁用后不显示问题

pull/89/head
猿小天 2023-02-12 20:13:36 +08:00
parent 905f5a053e
commit ccbb1c74f8
2 changed files with 43 additions and 6 deletions

View File

@ -185,11 +185,11 @@ class MenuViewSet(CustomModelViewSet):
parent = params.get('parent', None) parent = params.get('parent', None)
if params: if params:
if parent: if parent:
queryset = self.queryset.filter(status=1, parent=parent) queryset = self.queryset.filter(parent=parent)
else: else:
queryset = self.queryset.filter(status=1) queryset = self.queryset
else: else:
queryset = self.queryset.filter(status=1, parent__isnull=True) queryset = self.queryset.filter(parent__isnull=True)
queryset = self.filter_queryset(queryset) queryset = self.filter_queryset(queryset)
serializer = MenuSerializer(queryset, many=True, request=request) serializer = MenuSerializer(queryset, many=True, request=request)
data = serializer.data data = serializer.data

View File

@ -10,7 +10,7 @@
from collections import OrderedDict from collections import OrderedDict
from django.core import paginator 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.pagination import PageNumberPagination
from rest_framework.response import Response from rest_framework.response import Response
@ -21,12 +21,49 @@ class CustomPagination(PageNumberPagination):
max_page_size = 999 max_page_size = 999
django_paginator_class = DjangoPaginator 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): def get_paginated_response(self, data):
code = 2000 code = 2000
msg = 'success' msg = 'success'
res = { res = {
"page": int(self.get_page_number(self.request, paginator)) or 1, "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, "limit": int(self.get_page_size(self.request)) or 10,
"data": data "data": data
} }
@ -38,6 +75,6 @@ class CustomPagination(PageNumberPagination):
return Response(OrderedDict([ return Response(OrderedDict([
('code', code), ('code', code),
('msg', msg), ('msg', msg),
# ('total',self.page.paginator.count),
('data', res), ('data', res),
])) ]))