aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/pagination.py
blob: 398e6f3d588fda6efb1cc66f627f03cc0c783ec3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from rest_framework import serializers

# TODO: Support URLconf kwarg-style paging


class NextPageField(serializers.Field):
    def to_native(self, value):
        if not value.has_next():
            return None
        page = value.next_page_number()
        request = self.context['request']
        return request.build_absolute_uri('?page=%d' % page)


class PreviousPageField(serializers.Field):
    def to_native(self, value):
        if not value.has_previous():
            return None
        page = value.previous_page_number()
        request = self.context['request']
        return request.build_absolute_uri('?page=%d' % page)


class PaginationSerializer(serializers.Serializer):
    count = serializers.Field(source='paginator.count')
    next = NextPageField(source='*')
    previous = PreviousPageField(source='*')

    def to_native(self, obj):
        """
        Prevent default behaviour of iterating over elements, and serializing
        each in turn.
        """
        return self.convert_object(obj)