[英]Django REST -- How to "modify" value before returning the REST response?
我做了一些研究,但我不太確定我在技術上要尋找什么,所以我沒有找到太多信息。 我正在使用 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
問題:我在Car
模型中的speed
字段是一個整數,當我訪問 REST 端點 API 時,我不想返回一個整數,而是一個字符串。 基本上:
if speed is 0:
return "slow"
else:
return "fast"
所以一個 JSON 響應示例是:
{ name: "ferrari", speed: "fast" }
您可以使用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')
添加另一種方法 -
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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.