You need to enable JavaScript to run this app. Django Rest Framework如何将序列化返回的对象列表扁平化为字符串列表
优惠活动
大模型
产品
解决方案
定价
更多

Django Rest Framework如何将序列化返回的对象列表扁平化为字符串列表

实现方案

你可以通过以下两种常用方式实现扁平化的ID数组返回,同时可搭配性能优化配置避免额外查询开销:

方案1:使用SerializerMethodField(最简洁直观)

直接在用户序列化器中自定义字段取值逻辑,无需额外定义嵌套的关联序列化器:

from rest_framework import serializers
from .models import MyUser

class BulkQualificationSerializer(serializers.ModelSerializer):
    qualifications = serializers.SerializerMethodField()

    class Meta:
        model = MyUser
        fields = ["qualifications"]

    def get_qualifications(self, obj):
        # 直接遍历关联数据返回ID字符串列表
        return [str(qual.qualification.id) for qual in obj.qualifications.all()]

方案2:重写嵌套序列化器的to_representation方法

如果要保留独立的关联序列化器复用逻辑,可以修改子序列化器的返回格式:

from rest_framework import serializers
from .models import MyUser, MyUserQualification

class MyUserQualificationBulkSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyUserQualification
        fields = []

    def to_representation(self, instance):
        # 直接返回ID字符串,替代默认的字典结构
        return str(instance.qualification.id)

class BulkQualificationSerializer(serializers.ModelSerializer):
    qualifications = MyUserQualificationBulkSerializer(
        many=True,
        read_only=True,
    )

    class Meta:
        model = MyUser
        fields = ["qualifications"]

可选性能优化

为了避免N+1查询问题,建议修改视图的查询集,提前预加载关联数据:

from django.db.models import Prefetch
from rest_framework import generics
from .models import MyUser, MyUserQualification
from .serializers import BulkQualificationSerializer

class MyUserDetail(generics.RetrieveAPIView):
    lookup_field = "email"
    queryset = MyUser.objects.prefetch_related(
        Prefetch("qualifications", queryset=MyUserQualification.objects.select_related("qualification"))
    ).all()
    serializer_class = BulkQualificationSerializer

注意:你的原有代码中存在模型类名拼写错误(myUserQualification应为MyUserQualification、myUser应为MyUser),调整时请同步修正。

内容的提问来源于stack exchange,提问作者zigzagzoom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 12:48:03