gpt4 book ai didi

django - 如何将所有元数据包装到 "meta"属性中?

转载 作者:行者123 更新时间:2023-12-04 16:24:18 24 4
gpt4 key购买 nike

所以我有一个分页的结果列表。默认情况下,DRF 对其进行格式化的方式如下:

{
"count": 1023
"next": "https://api.example.org/accounts/?page=5",
"previous": "https://api.example.org/accounts/?page=3",
"results": [

]
}

如何将所有元数据包装到“元”属性中,以便响应看起来像这样:

{
"meta": {
"count": 1023
"next": "https://api.example.org/accounts/?page=5",
"previous": "https://api.example.org/accounts/?page=3",
},
"results": [

]
}

编辑:感谢 Alasdair 的回答。这是我的做法:

from rest_framework import pagination
from rest_framework.response import Response

class CustomPagination(pagination.LimitOffsetPagination):

def get_paginated_response(self, data):
return Response({
'meta': {
'next': self.get_next_link(),
'previous': self.get_previous_link(),
'count': self.count
},
'results': data
})

最佳答案

您需要implement a custom pagination style将所有元数据包装到一个元属性中。

第 1 步实现自定义分页类:

首先,我们将实现一个继承自 pagination.LimitOffsetPagination 的自定义分页类 WrappedMetadataPagination。在那里,我们将覆盖 get_paginated_response() 并指定我们的自定义分页输出样式。

class WrappedMetadataPagination(pagination.LimitOffsetPagination):
"""
This custom pagination class wraps the metadata about the results
like 'next', 'previous' and 'next' keys into a dictionary with key as 'meta'.
"""

def get_paginated_response(self, data):
return Response({
'meta': { # wrap other keys as dictionary into 'meta' key
'next': self.get_next_link(),
'previous': self.get_previous_link(),
'count': self.count
},
'results': data
})

第 2 步在 DRF 设置中设置自定义类:

实现自定义类后,您需要在 DRF 设置中指定此自定义分页类。

REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'my_project.my_app.pagination.WrappedMetadataPagination', # specify the custom pagination class
...
}

关于django - 如何将所有元数据包装到 "meta"属性中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32972462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com