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

Django Rest Framework序列化器label参数不生效问题求助

问题原因及解决方案

你的问题出在对DRF中label参数的作用理解有误:label仅用于表单渲染、API文档的友好显示(比如Browsable API里的表单标签),不会修改序列化输出的JSON键名。要实现自定义输出字段名,可采用以下两种方法:

方法一:重写to_representation方法(推荐)

通过重写序列化器的to_representation方法,直接自定义输出的键值映射:

class TotalMarksSerializer(serializers.Serializer):
    roll_number__roll_number = serializers.IntegerField()
    roll_number__first_name = serializers.CharField()
    roll_number__last_name = serializers.CharField()
    Total_Marks = serializers.FloatField()

    def to_representation(self, instance):
        # 获取默认序列化数据
        original_data = super().to_representation(instance)
        # 重新映射为期望的键名
        return {
            'Roll Number': original_data['roll_number__roll_number'],
            'First Name': original_data['roll_number__first_name'],
            'Last Name': original_data['roll_number__last_name'],
            'Total Marks': original_data['Total_Marks']
        }

方法二:使用source参数配合键名转换

先给字段设置合法的Python标识符名称(不能含空格),通过source指向原数据字段,再在to_representation中转换为目标键名:

class TotalMarksSerializer(serializers.Serializer):
    roll_number = serializers.IntegerField(source='roll_number__roll_number')
    first_name = serializers.CharField(source='roll_number__first_name')
    last_name = serializers.CharField(source='roll_number__last_name')
    total_marks = serializers.FloatField(source='Total_Marks')

    def to_representation(self, instance):
        data = super().to_representation(instance)
        return {
            'Roll Number': data['roll_number'],
            'First Name': data['first_name'],
            'Last Name': data['last_name'],
            'Total Marks': data['total_marks']
        }

验证效果

使用任一方法后,序列化输出会符合你的期望:

[
    {
        "Roll Number": 1,
        "First Name": "Debbie",
        "Last Name": "Gutierrez",
        "Total Marks": 303.0
    }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:10:07