从PaginationSerializer更改或删除默认返回值

时间:2013-11-12 13:15:55

标签: python django django-rest-framework django-pagination

我正在使用Django REST Frameworks Paginator对从数据库中读取的JSON响应进行分页。

我当前的serializers.py文件如下所示:

class CountrySerializer(serializers.Serializer):
    country_geoname_id = serializers.CharField(required=True)
    country_code = serializers.CharField(source="iso", max_length=2L, required=True)
    country_name = serializers.CharField(max_length=64L, required=True)

    paginate_by_param = "offset"

    def transform_iso(self, obj, value):
        return "country_code"

class PaginatedCountrySerializer(pagination.PaginationSerializer):
    paginate_by_param = "offset"
    class Meta:
        object_serializer_class = CountrySerializer
        paginate_by_param = "offset"

请求/响应目前如下所示:

GET /v4/api/v1/countries/?limit=1&offset=1
{
    "count": 250, 
    "next": "http://dev.fanmode.com/v4/api/v1/countries/?limit=2&page=2&offset=1", 
    "previous": null, 
    "results": [
        {
            "country_geoname_id": 3041565, 
            "country_code": "AD", 
            "country_name": "Andorra"
        }, 
        ...
    ]
}

有人可以通过告诉我来帮助我:

  • 如何修改这些名称?例如,我想在next字段中将'page = 2'更改为'limit = 2'。我在settings.py文件中尝试了'PAGINATE_BY_PARAM': 'limit',但这不起作用。
  • 如何一起删除字段。我想从回复中删除'count'和'previous'。

感谢我能得到的任何帮助。 感谢。

1 个答案:

答案 0 :(得分:1)

您可以更改pagination.py文件中page_field课程中的NextPageField,将名称从page永久更改为limit

对于第二部分,您可以编写自己的custom PaginationSerializer

from rest_framework.pagination import BasePaginationSerializer, NextPageField
class MyPaginationSerializer(BasePaginationSerializer):

    next = NextPageField(source='*')

现在只返回nextresults字段。