如何为Django ModelSerializer添加额外字段new_field?
为Django分页API响应添加顶层额外字段
你的需求是在分页返回的顶层结构(和count、results同级)添加new_field,而非每个数据项中添加,有两种常用实现方式:
方法一:自定义分页类
通过重写分页类的get_paginated_response方法,在返回的响应数据中插入新字段:
from rest_framework.pagination import PageNumberPagination class CustomPagination(PageNumberPagination): def get_paginated_response(self, data): # 先调用父类方法生成标准分页响应数据 paginated_response = super().get_paginated_response(data) # 添加自定义字段 paginated_response.data['new_field'] = "New Field Value" return paginated_response
然后在你的列表视图中指定这个分页类:
from rest_framework.generics import ListAPIView class MyModelListView(ListAPIView): queryset = MyModel.objects.all() serializer_class = MySerializer pagination_class = CustomPagination # 指定自定义分页类
方法二:重写视图的list方法
直接在视图的list方法中修改返回的响应数据:
from rest_framework.generics import ListAPIView class MyModelListView(ListAPIView): queryset = MyModel.objects.all() serializer_class = MySerializer def list(self, request, *args, **kwargs): # 调用父类方法获取标准分页响应 response = super().list(request, *args, **kwargs) # 插入自定义字段 response.data['new_field'] = "New Field Value" return response
注意事项
你当前的MySerializer中fields的写法存在错误,元组内的字段应该是独立字符串,而非拼接成一个字符串,正确写法如下:
class MySerializer(ModelSerializer): class Meta: model = MyModel fields = ('id', 'name', 'description') # 每个字段单独作为字符串元素
内容的提问来源于stack exchange,提问作者Vishnu T
相关产品推荐
相关产品推荐

