2015-11-10 3 views
4

Я провел некоторое исследование, но я не совсем уверен, что я технически ищу, поэтому я не нашел много информации. Я использую Django REST.Django REST - Как «изменить» значение перед возвратом ответа 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 поле вмодель является целым числом, когда я обращаюсь к API конечной точки REST, я не хочу возвращать целое число, а вместо строки. В основном:

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

Так пример JSON ответ:

{ name: "ferrari", speed: "fast" } 

ответ

6

Вы можете использовать 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') 
+0

Является 'поля = ('имя', 'скорость')' требуется? Я не включил это, и он отлично работает для меня. Просто интересуюсь. –

+0

Ну, не требуется, если вы хотите вытащить все поля. Обычно я работаю с очень большими моделями, и мне нужны только некоторые поля. Но это не требуется. – Gocht

+0

ОК, понял. Благодаря! –