Django Rest Framework(DRF)如何根据query_params设置分页类? [英] Django Rest Framework (DRF) How to set pagination class depending on query_params?
本文介绍了Django Rest Framework(DRF)如何根据query_params设置分页类?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
class BlockViewSet(viewsets)。我想尝试根据query_params在视图中使用不同的分页类。 ModelViewSet)
pre>
pagination_class = defaultPaginationClass
def get_queryset(self):
queryset = Block.objects.all()
user = self.request.query_params.get ('user',None)
如果用户不是无:
queryset = queryset.filter(user = user)
返回查询
所以如果获取请求是
/ block /
,我想使用defaultPagination类,而如果请求是/ block /?user = 1
,我想使用customPagination类。解决方案尝试重新定义
paginator
属性,如果有用户查询参数,请将自定义分页类分配给self._paginator
@property
def paginator(self):
与视图关联的分页符实例,或无。
如果不是hasattr(self,'_paginator'):
如果self.pagination_class为无:
self._paginator =无
else:
user = self.request.query_params.get('user',None)
如果用户不是None:
self._paginator = customPaginationClass()
else:
self ._paginator = self.pagination_class()
return self._paginator
Final
class BlockViewSet(viewsets.ModelViewSet):
pagination_class = defaultPaginationClass
@property
def paginator(self):
与视图关联的分页符实例,或无。
如果不是hasattr(self,'_paginator'):
如果self.pagination_class为无:
self._paginator =无
else:
user = self.request.query_params.get('user',None)
如果用户不是None:
self._paginator = customPaginationClass()
else:
self ._paginator = self.pagination_class()
return self._paginator
def get_queryset(self):
queryset = Block.objects.all()
user = self .request.query_params.get('user',None)
如果用户不是无:
queryset = queryset.filter(user = user)
返回查询
I'm trying to use different sets of pagination classes on a viewset depending on query_params.
class BlockViewSet(viewsets.ModelViewSet): pagination_class = defaultPaginationClass def get_queryset(self): queryset = Block.objects.all() user = self.request.query_params.get('user', None) if user is no None: queryset = queryset.filter(user=user) return queryset
so if the get request is made to
/block/
, I want to use defaultPagination class while if the request is made to/block/?user=1
, I want to use customPagination class.解决方案Try to redefine
paginator
property and if there is user query param, assign your custom pagination class toself._paginator
@property def paginator(self): """ The paginator instance associated with the view, or `None`. """ if not hasattr(self, '_paginator'): if self.pagination_class is None: self._paginator = None else: user = self.request.query_params.get('user', None) if user is not None: self._paginator = customPaginationClass() else: self._paginator = self.pagination_class() return self._paginator
Final
class BlockViewSet(viewsets.ModelViewSet): pagination_class = defaultPaginationClass @property def paginator(self): """ The paginator instance associated with the view, or `None`. """ if not hasattr(self, '_paginator'): if self.pagination_class is None: self._paginator = None else: user = self.request.query_params.get('user', None) if user is not None: self._paginator = customPaginationClass() else: self._paginator = self.pagination_class() return self._paginator def get_queryset(self): queryset = Block.objects.all() user = self.request.query_params.get('user', None) if user is no None: queryset = queryset.filter(user=user) return queryset
这篇关于Django Rest Framework(DRF)如何根据query_params设置分页类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文