如何在DRF中的一个视图中使用多个分页类



我想创建一个供移动客户端和web客户端使用的web服务器。Web客户端开发人员想要limit offset pagination,而移动客户端开发人员需要page number pagination

在django-rest框架中,我们似乎不能将多个分页类分配给一个视图。

那么在这种情况下有什么解决办法吗?

最初创建一个混合类

class MultiplePaginationMixin:
def get_pagination_class(self):
return self.pagination_class
@property
def paginator(self):
pagination_class = self.get_pagination_class()
if pagination_class is None:
return None
return pagination_class()

并通过覆盖get_pagination_class(...)方法在您的视图中使用它作为

class MyView(MultiplePaginationMixin,viewsets.ModelViewSet):
def get_pagination_class(self):
if some_codition:
return PageNumberPagination
return LimitOffsetPagination

简单使用属性((函数。

class MyView(viewsets.ModelViewSet):
def get_pagination_class(self):
if some_codition:
return PageNumberPagination
return LimitOffsetPagination
pagination_class = property(fget=get_pagination_class)

这就是你所需要的。

@JPG的答案是正确的。只是一个增强-

def get_pagination_class(self):
return self.pagination_class()

@property
def paginator(self):
"""
The paginator instance associated with the view, or `None`.
"""
if not hasattr(self, '_paginator'):
if self.get_pagination_class() is None:
self._paginator = None
else:
self._paginator = self.get_pagination_class()
return self._paginator

class MyView(MultiplePaginationMixin, viewsets.ModelViewSet):
def get_pagination_class(self):
if some_codition:
return PageNumberPagination()
return LimitOffsetPagination()

最新更新