Django Rest Framework(DRF)如何根据query_params设置分页类? [英] Django Rest Framework (DRF) How to set pagination class depending on query_params?

查看:1269
本文介绍了Django Rest Framework(DRF)如何根据query_params设置分页类?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  class BlockViewSet(viewsets)。我想尝试根据query_params在视图中使用不同的分页类。 ModelViewSet)
pagination_class = defaultPaginationClass

def get_queryset(self):
queryset = Block.objects.all()
user = self.request.query_params.get ('user',None)
如果用户不是无:
queryset = queryset.filter(user = user)
返回查询
pre>

所以如果获取请求是 / 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 to self._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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆