Browse Source

Implement custom pagination class for REST framework and update settings to use it

master
mortezaei 5 months ago
parent
commit
4635bbbeba
  1. 2
      config/settings/base.py
  2. 24
      utils/pagination.py

2
config/settings/base.py

@ -231,7 +231,7 @@ AUTH_PASSWORD_VALIDATORS = [
REST_FRAMEWORK = { REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
'DEFAULT_PAGINATION_CLASS': 'utils.pagination.StandardResultsSetPagination',
'PAGE_SIZE': 16, 'PAGE_SIZE': 16,
# 'DEFAULT_AUTHENTICATION_CLASSES': [ # 'DEFAULT_AUTHENTICATION_CLASSES': [
# 'apps.account.auth_back.TokenAuthentication2', # 'apps.account.auth_back.TokenAuthentication2',

24
utils/pagination.py

@ -1,12 +1,23 @@
from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination
from rest_framework.response import Response
from rest_framework.pagination import PageNumberPagination
from rest_framework.response import Response
class StandardResultsSetPagination(PageNumberPagination):
page_size = 16
page_size_query_param = 'page_size'
max_page_size = 100
def get_paginated_response(self, data):
return Response({
'count': self.page.paginator.count,
'next': self.get_next_link(),
'previous': self.get_previous_link(),
'results': data,
})
class NoPagination(PageNumberPagination): class NoPagination(PageNumberPagination):
def paginate_queryset(self, queryset, request, view=None): def paginate_queryset(self, queryset, request, view=None):
# Override to return all items instead of paginated ones
self.count = len(queryset) self.count = len(queryset)
self.request = request self.request = request
self.page = None self.page = None
@ -14,10 +25,9 @@ class NoPagination(PageNumberPagination):
return list(queryset) return list(queryset)
def get_paginated_response(self, data): def get_paginated_response(self, data):
# Keep the structure but include all results
return Response({ return Response({
'count': self.count, 'count': self.count,
'next': None, # No next page
'previous': None, # No previous page
'next': None,
'previous': None,
'results': data, 'results': data,
}) })
Loading…
Cancel
Save