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

Django Rest Framework:如何将序列化数据转换为纯值列表

解决方案

有三种常见的实现方式,可根据你的业务场景选择:

方案1:重写ModelSerializer的to_representation方法

适合需要保留Serializer复用逻辑的场景,修改后序列化单条数据时直接返回字段值而非字典:

from rest_framework import serializers
from .models import YourModel # 替换为你自己的模型类

class StateSerializer(serializers.ModelSerializer):
    class Meta:
        model = YourModel
        fields = ["state"]

    def to_representation(self, instance):
        # 仅提取目标字段值返回,不包裹字典
        return super().to_representation(instance)["state"]

视图层无需额外修改,正常使用该Serializer返回列表即可得到纯字符串数组。

方案2:直接用values_list取值返回(无需Serializer)

如果没有额外的序列化校验逻辑,该方案更高效,省去序列化层的开销:

from rest_framework.response import Response
from rest_framework.views import APIView
from .models import YourModel

class StateListView(APIView):
    def get(self, request):
        # flat=True 会直接返回单字段的可迭代对象,而非元组列表
        state_list = YourModel.objects.values_list("state", flat=True)
        return Response(list(state_list))

方案3:通用视图重写list方法

如果使用DRF的通用视图类,可直接重写列表返回逻辑:

from rest_framework import generics
from rest_framework.response import Response
from .models import YourModel

class StateListView(generics.ListAPIView):
    queryset = YourModel.objects.all()
    # 可保留原有过滤、分页等逻辑,仅修改返回处理
    def list(self, request, *args, **kwargs):
        queryset = self.filter_queryset(self.get_queryset())
        state_list = queryset.values_list("state", flat=True)
        # 如需保留分页逻辑,可在此处加入分页处理代码
        return Response(list(state_list))

注意事项

以上方案对数字、日期等其他类型的单字段返回同样适用,DRF会自动完成JSON类型转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:36:02