django restframework choice 自定义输出数据
# 问题
我有一个这样的需求,返回的数据json中返回的是id,但是我想要得到该id对应的name。
id对应的name
PlatformType = (
(0, '通用'),
(1, '前装'),
(2, '后装'),
(3, '海外前装'),
(4, '海外后装'),
(5, '小系统')
)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
class TrackSerializer(serializers.ModelSerializer):
platform = serializers.ChoiceField(choices=PlatformType)
class Meta:
model = Track
fields = "__all__"
1
2
3
4
5
6
7
2
3
4
5
6
7
返回的结果是:
{
platform: 1
}
1
2
3
2
3
但是我想要的是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__"
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
- 重写显示的字段。
将platform字段重新进行改写,获取其显示的名字。
class TrackSerializer(serializers.ModelSerializer):
platform = serializers.SerializerMethodField()
class Meta:
model = Track
fields = "__all__"
def get_platform(self, obj):
return obj.get_platform_display()
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
上次更新: 2023/05/01, 18:02:43