Django Rest Framework: LimitZeroNoResultsPagination custom pagination
A custom pagination to return empty data when limit=0

When talking about LimitOffsetPagination in django rest framework, it handles limit as strictly positive integer only (1,2,3,4.......). Whenever you send any non positive numbers/negative numbers including zero (0) to the limit query LimitOffsetPagination will ignore this limit value and will work with it's own customizable default_limit attribute which indeed can be customized using PAGE_SIZE settings for REST_FRAMEWORK
Let's talk about my scenario
Whenever i send limit=0 params for the pagination, it ignores this values and sends/returns me whole lot of data(according to default_limit). I wanted to change this behaviour of the LimitOffsetPagination class so that the pagination class return empty data i.e zero data when i send limit=0 params
so, lets customize the LimitOffsetPagination class
from rest_framework.pagination import LimitOffsetPagination, _positive_int
class LimitZeroNoResultsPagination(LimitOffsetPagination):
def get_limit(self, request):
if self.limit_query_param:
try:
return _positive_int(
request.query_params[self.limit_query_param],
strict=False,
cutoff=self.max_limit
)
except (KeyError, ValueError):
pass
return self.default_limit
If, you compare what we customized in this class then you can see we changed strict=False for the _positive_int function
Note: _positive_int is a private function, i do not promote using private func but in this case i needed it so please use this responsibly.
So, when you use this Pagination class for your API's and use limit=0 then you will see this

Where do i use this ?
I use this limit=0 whenever i want extra data from the API like the total count but don't want it's data
Tested on
- Django(3.0.3) and Django Rest Framework(3.11.0)
- Django(4.0.2) and Django Rest Framework(3.13.1)






