python - Django Rest Framework (DRF) 如何根据 query_params 设置分页类?

标签 python django pagination django-rest-framework

我尝试根据 query_params 在 View 集上使用不同的分页类集。

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

因此,如果向 /block/ 发出 get 请求,我想使用 defaultPagination 类,而如果向 /block/?user=1 发出请求,我想使用 customPagination 类。

最佳答案

尝试重新定义 paginator 属性,如果有用户查询参数,请将自定义分页类分配给 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

决赛

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

关于python - Django Rest Framework (DRF) 如何根据 query_params 设置分页类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38988272/

相关文章:

python - 来自 Postman 的 Django POST 请求

python - 保存子模型时,在 Django 抽象父模型上启动后保存

jQuery 将类添加到下一个列表项,一次一个并循环回到开头

javascript - 无法将 news-api 分页到 Vue.js2 中的不同页面

javascript - 当 uib-pagination 包装在另一个指令中时,AngularJS 表数据没有更新?

python - 类内的辅助函数 - 各种方法的优缺点

python - ChoiceField : Select a valid choice. 这不是可用选项之一

python - TensorFlow ValueError : The channel dimension of the inputs should be defined. 发现 `None`

python - 如何在 Python 3.x 上获取用于数据流 GCP 的 Apache Beam

python - 使用 Selenium : How to keep logged in after closing Driver in Python