在Django Rest Framework中定义分页page_size per-view

fod*_*ma1 8 python django pagination django-rest-framework

从版本开始3.3,不再可能在视图上定义page_size,因为它已移至paginator类.相关的弃用

我们的API为不同的视图定义了不同的page_sizes,添加新的paginator子类只是为了覆盖page_size属性感觉不明确.我无法在视图定义中实例化paginator类,并在此处__init__实例化时使用该方法.我可以覆盖它并使它成为一个方法,返回一个用正确的参数实例化的实例,但由于它的名字不是,可能它不是一个好主意.get_pagination_class

我的问题是动态创建具有适当page_size属性集的paginator类的最简洁方法是什么?

我已经看到了这个问题,我想避免它的两个解决方案.

Joh*_*fis 7

你可以实现相对干净的东西:


  • 假设您使用pagination_class属性设置每个类的分页 .
  • 假设您将page_size属性保留在类中.

  1. 在您settings.py添加全局分页设置中:

    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': default_page_size,
    
    Run Code Online (Sandbox Code Playgroud)

    您可以处理具有相同页面大小的所有视图.

  2. 对于任何其他视图/视图集:

    class ACustomViewSet(mixins.ListModelMixin, 
                         mixins.DestroyModelMixin, 
                         viewsets.GenericViewSet):
    
        pagination_class = PageNumberPagination
        page_size = N
        pagination_class.page_size = self.page_size
    
    Run Code Online (Sandbox Code Playgroud)

    或者您可以在方法中执行此操作:

    def list(self, request, *args, **kwargs):
        self.pagination_class.page_size = self.page_size 
        ...
    
    Run Code Online (Sandbox Code Playgroud)

  • 谢谢John,1)Python给我一个`Undefined变量:self`,从2和3我得到了它,你觉得`self`的问题是什么?我会继续寻找它......哦等等!我想我可以放:`pagination_class.page_size = page_size`不是吗? (2认同)