Python DRF返回json的数据属性内的项,而不是数组
将我的端点序列化为以下内容的最佳方法是什么:Python DRF返回json的数据属性内的项,而不是数组,python,django,django-rest-framework,Python,Django,Django Rest Framework,将我的端点序列化为以下内容的最佳方法是什么: { status: 200, meta: { "name": "foo", "total": 666 }, data: [ {item1}, {item2}, {item3}, ...with the pagination affecting this array ] } 默认情况下,我得到: [ {item1}, {item2}, {item3}, ...
{
status: 200,
meta: {
"name": "foo",
"total": 666
},
data: [
{item1},
{item2},
{item3},
...with the pagination affecting this array
]
}
默认情况下,我得到:
[
{item1},
{item2},
{item3},
...with pagination
]
我能够得到接近我想要的结果(缺少分页),但我相信这不是最好的方法。我的序列化程序如下所示:
class FooSerializer(serializers.ModelSerializer):
status = serializers.SerializerMethodField()
meta = serializers.SerializerMethodField()
data = serializers.SerializerMethodField()
def get_status(self, obj):
return status.HTTP_200_OK
def get_meta(self, obj):
summary = {
"name": obj.name,
"total": obj.user.device_set.count()
}
return summary
def get_data(self, obj):
devices = obj.user.device_set.all()
return DeviceListSerializer(devices, many=True).data
class Meta:
model = Device
fields = ('status', 'meta', 'data')
它会在你得到的回应附近触动你
但是这样你就没有分页了,对吗?或者我必须手动控制分页,我在Django IRC频道上得到了这个软件包的建议,但我需要更好地理解它是如何工作的。
response_dic = {}
response_dic['status_code'] = status_code
if settings.HTTP_USER_ERROR == status_code:
response_dic['error'] = response
elif response:
response_dic['data'] = data
response_dic['meta'] = meta
return response_dic