假设我有一个模特:
class MyModel(models.Model):
name = models.CharField(max_length=100)
description= models.TextField()
...
然后我用HyperLinkedSerializer创建了ModelViewSet,所以当我调用我的/ api / mymodels endpint时,我得到这样的响应:
{
"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响应的这种行为?
答案 0 :(得分:1)
第一个响应似乎是分页响应,由分页序列化程序确定。您可以创建将使用自定义格式的a custom pagination serializer。您正在寻找类似于以下内容的内容:
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"}
]
}
可以通过您的设置as described in the documentation全局设置分页序列化程序。
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_SERIALIZER_CLASS': {
'full.path.to.CustomPaginationSerializer',
}
}