修复BUG: 1.分页遇到404问题;2.菜单禁用后不显示问题
							parent
							
								
									905f5a053e
								
							
						
					
					
						commit
						ccbb1c74f8
					
				|  | @ -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 | ||||
|  |  | |||
|  | @ -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), | ||||
|         ])) | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 猿小天
						猿小天