如何在Django REST Framework序列化器中按请求展示不同字段
Django列表与详情接口返回不同字段的实现
方法:拆分序列化器+视图动态切换
这种场景最直接的解决方式是创建两个序列化器,分别对应列表和详情接口的字段需求,然后在视图中根据当前请求的动作(列表查询/单实例查询)选择对应序列化器。
1. 定义两个序列化器
from rest_framework import serializers from .models import Post # 列表页专用序列化器,返回description字段 class PostListSerializer(serializers.ModelSerializer): class Meta: model = Post fields = ['id', 'title', 'image', 'description', 'slug'] lookup_field = 'slug' # 详情页专用序列化器,返回body字段 class PostDetailSerializer(serializers.ModelSerializer): class Meta: model = Post fields = ['id', 'title', 'image', 'body', 'slug'] lookup_field = 'slug'
2. 修改视图类,动态切换序列化器
重写ModelViewSet的get_serializer_class方法,根据请求动作返回对应序列化器:
from rest_framework import viewsets from .models import Post from .serializers import PostListSerializer, PostDetailSerializer class PostViewSet(viewsets.ModelViewSet): queryset = Post.published.all() lookup_field = 'slug' def get_serializer_class(self): # 列表请求用列表序列化器,其余(详情)用详情序列化器 if self.action == 'list': return PostListSerializer return PostDetailSerializer
效果验证
- 访问
/posts/(列表接口)时,返回数据包含description字段,匹配预期格式 - 访问
/posts/<slug>/(详情接口)时,返回数据包含body字段,匹配预期格式
内容的提问来源于stack exchange,提问作者Peyman Anqa
相关产品推荐
相关产品推荐

