Django REST - how to "change" a value before returning a REST response?

I did some research, but I'm not quite sure what I'm technically looking for, so I did not find much information. I am using Django REST.

model

class Car(models.Model)
    name =  name = models.CharField(blank=True, null=True, db_index=True)
    speed = models.IntegerField(default=SPEED.FAST)

view

class CarViewSet(viewsets.ModelViewSet):
    queryset = Car.objects.all()
    serializer_class = CarSerializer

serializer

class CarSerializer(serializers.ModelSerializer):
    class Meta:
        model = Car

Question: My speedfield in Caris an integer, when I access the REST endpoint API, I do not want to return an integer, but instead of a string. Mostly:

if speed is 0:
    return "slow"
else:
    return "fast" 

So, an example JSON response:

{ name: "ferrari", speed: "fast" }
+4
source share
1 answer

You can use 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')
+8
source

Source: https://habr.com/ru/post/1615330/


All Articles