在哪里更改Django Rest Framework中的JSON响应格式?
假设我有一个模型:
class MyModel(models.Model):
name = models.CharField(max_length=100)
description= models.TextField()
...
然后我创建了一个ModelViewSet,使用了HyperLinkedSerializer,所以当我访问我的/api/mymodels这个接口时,我得到的响应是这样的:
{
"count": 2,
"next": null,
"previous": null,
"results": [
{ "name": "somename", "description": "desc"},
{ "name": "someothername", "description": "asdasd"},
]
}
而当我访问/api/mymodels/1时,我得到的是:
{ "name": "somename", "description": "asdasd"}
但我想要得到的是:
{
"metadata":{ ...},
"results": { "name": "somename", "description": "desc"}
}
我希望在我网站上的所有模型都使用这种格式,所以我不想一个个去改每个视图集,我想在(很可能是)一个类里实现这个功能,然后让所有的视图集都能用上。
所以我的问题是:我应该修改或创建哪个渲染器、序列化器或其他类(我真的不太确定)来实现这种JSON响应的效果?
1 个回答
2
第一个回复看起来是一个分页的响应,这个分页是由分页序列化器决定的。你可以创建一个自定义的分页序列化器,这样就能使用你想要的格式。你可以参考下面的例子:
class MetadataSerialier(pagination.BasePaginationSerializer):
count = serializers.Field(source='paginator.count')
next = NextPageField(source='*')
previous = PreviousPageField(source='*')
class CustomPaginationSerializer(pagination.BasePaginationSerializer):
metadata = MetadataSerializer(source='*')
这样你应该能得到类似下面的输出:
{
"metadata": {
"count": 2,
"next": null,
"previous": null
},
"results": [
{ "name": "somename", "description": "desc"},
{ "name": "someothername", "description": "asdasd"}
]
}
分页序列化器可以通过你的设置全局设置,具体可以参考文档。
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_SERIALIZER_CLASS': {
'full.path.to.CustomPaginationSerializer',
}
}