Как использовать несколько классов Pagination в одном представлении в DRF - PullRequest
1 голос
/ 26 февраля 2020

Я хочу создать веб-сервер, который будет использоваться мобильными клиентами и веб-клиентами. Разработчик веб-клиента хочет limit offset pagination, но разработчик мобильного клиента хочет page number pagination.

В django инфраструктуре отдыха кажется, что мы не можем назначить несколько классов пагинации для одного представления.

, поэтому есть ли решение в этой ситуации?

1 Ответ

1 голос
/ 26 февраля 2020

Сначала создайте класс mixin,

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(<b>MultiplePaginationMixin,</b> viewsets.ModelViewSet):
    <b>def get_pagination_class(self):
        if some_codition:
            return PageNumberPagination
        return LimitOffsetPagination</b>
...