我做了一些研究,但我不太确定我在技术上寻找什么,所以我找不到太多信息。我正在使用Django REST。
模型
class Car(models.Model)
name = name = models.CharField(blank=True, null=True, db_index=True)
speed = models.IntegerField(default=SPEED.FAST)
查看
class CarViewSet(viewsets.ModelViewSet):
queryset = Car.objects.all()
serializer_class = CarSerializer
序列化程序
class CarSerializer(serializers.ModelSerializer):
class Meta:
model = Car
问题: speed
模型中的Car
字段是一个整数,当我访问REST端点API时,我不想返回一个整数,而是一个字符串。基本上是:
if speed is 0:
return "slow"
else:
return "fast"
所以JSON响应的示例是:
{ name: "ferrari", speed: "fast" }
答案 0 :(得分:12)
您可以使用SerializerMethodField
:
class CarSerializer(serializers.ModelSerializer):
speed = serializers.SerializerMethodField()
def get_speed(self, obj):
if obj.speed == 0:
return "slow"
else:
return "fast"
class Meta:
model = Car
fields = ('name', 'speed')
答案 1 :(得分:3)
添加另一种方法-
class CarSerializer(serializers.ModelSerializer):
class Meta:
model = Car
fields = ('name', 'speed')
def to_representation(self, data):
data = super(CarSerializer, self).to_representation(data)
data['speed'] = 'slow' if data.get('speed') == 0 else 'fast'
return data
@Gocht答案中的一项改进。 更好的做法是在方法get_speed中使用条件返回时省略多余的else语句-
def get_speed(self, obj):
if obj.speed == 0:
return "slow"
return "fast"