# 问题
我有一个这样的需求,返回的数据json中返回的是id,但是我想要得到该id对应的name。
id对应的name
代码语言:javascript复制PlatformType = (
(0, '通用'),
(1, '前装'),
(2, '后装'),
(3, '海外前装'),
(4, '海外后装'),
(5, '小系统')
)
代码语言:javascript复制class TrackSerializer(serializers.ModelSerializer):
platform = serializers.ChoiceField(choices=PlatformType)
class Meta:
model = Track
fields = "__all__"
返回的结果是:
代码语言:javascript复制{
platform: 1
}
但是我想要的是1
对应的前装
,这个时候需要自定义返回的数据。
# 解决方案
- 自定义字段类型,重写
ChoiceField
字段类,并重写to_representation
方法,在序列化platform
字段时,会调用to_representation
方法转换成我们想要的格式。
class PlatFormField(serializers.ChoiceField):
def to_representation(self, value: Any):
return self.choices[value]
class TrackSerializer(serializers.ModelSerializer):
platform = PlatFormField(choices=PlatformType)
class Meta:
model = Track
fields = "__all__"
- 重写显示的字段。
将platform字段重新进行改写,获取其显示的名字。
代码语言:javascript复制class TrackSerializer(serializers.ModelSerializer):
platform = serializers.SerializerMethodField()
class Meta:
model = Track
fields = "__all__"
def get_platform(self, obj):
return obj.get_platform_display()