【问题标题】:Change or Remove Default Return Values from PaginationSerializer从 PaginationSerializer 更改或删除默认返回值
【发布时间】:2013-11-12 13:15:54
【问题描述】:

我正在使用 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”。

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

【问题讨论】:

  • 更改 'PAGINATE_BY_PARAM': 'limit' 不会是 API 返回的 page=n,它只是允许您使用其他替代方案。
  • @hcwhsa 感谢您的回复。我想可能是这样。你知道我如何在响应中更改它吗?
  • 我已经发布了答案。

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


【解决方案1】:

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

第二部分你可以自己写custom PaginationSerializer:

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

    next = NextPageField(source='*')

现在只会返回 nextresults 字段。

【讨论】:

  • 非常感谢。如何将 MyPaginationSerializer 链接到我正在使用的序列化程序?它怎么知道使用这个序列化程序?我尝试将 pagination_serializer_class = MyPaginationSerializer 添加到 PaginatedCountrySerializer 元类,但它不起作用。再次感谢。
  • @MarkWinterbottom 看看这些例子:django-rest-framework.org/api-guide/…
  • PaginationSerializer 在 django 1.8 中已弃用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 2018-02-07
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多