2015-01-14 17 views
1
if serializer.is_valid(): 
    serializer.save() 
    return Response(serializer.data, status=status.HTTP_201_CREATED) 

如何添加一個額外的字段(非模型字段)到serializer.data字典?我想在發送回覆之前添加(「status」:「available」)。我試過 -如何將非模型字段添加到DRF的序列化程序響應字典?

if serializer.is_valid(): 
    serializer.save() 
    ## This one doesn't work as serializer.data is of the type 'ReturnDict' 
    serializer.data.append(("status","available")) 
    ## OR 
    serializer.data["status"] = "available" 
    return Response(serializer.data, status=status.HTTP_201_CREATED) 

我也想在發送響應之前修改serializer.data的字段名稱。有沒有辦法做到這一點?

回答

7

可以額外字段添加到串行這樣的:


class MySerializer(serializers.ModelSerializer) 
    status = serializers.SerializerMethodField('get_status') 

    class Meta: 
     model = MyModel 
     read_only_fields = ('status',) 

    def get_status(self, obj): 
     """ Get the current objects status """ 
     if obj.available == 1: 
      return 'available' 
     else: 
      return 'not available' 

一種方式來改變字段名是使用中間件類格式化響應。我會這樣做,如果我必須格式化整個API的響應。

+0

將狀態字段添加到序列化程序將在創建新對象時創建POST問題。在我的模型中我沒有任何稱爲「狀態」的字段,我不想要它。所以,如果我在這裏添加狀態字段,序列化POST請求可能會產生問題。 – pnhegde

+0

它不會產生問題,因爲您可以將其設置爲只讀。 –

+0

'class Meta:' 'model = MyModel' 'read_only_fields =('status',)' –

相關問題