You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 03:54:28