2016-03-28 72 views
0

我正在使用Django REST框架來創建API。我想將來自多個模型的數據添加到序列化輸出中。將附加數據添加到由Django串化器返回的模型數據

此刻我的串行器看起來像這樣:

class ItemSerializer(serializers.HyperlinkedModelSerializer): 
 
    class Meta: 
 
     model = Item 
 
     fields = ('url', 'owner', 'item_type')

我想補充一個

item_cost

值fr om我的成本模型到序列化輸出(項目模型中每個項目的不同成本)。我還想爲序列化輸出添加一個unix時間戳值(一個值放置在所有其他序列化輸出的末尾)。

我的串行器在一個視圖中使用如下:

class ItemViewSet(viewsets.ModelViewSet): 
 
    queryset = Item.objects.all().order_by('-date_added') 
 
    serializer_class = ItemSerializer

我無法工作,如何與其他數據項添加到串行化輸出。

回答

2

您可以從rest_framework.serializers使用SerializerMethodField並創建一個返回你正在尋找的值的方法,例如:在文檔

class ItemSerializer(serializers.HyperlinkedModelSerializer): 
    cost = serializers.SerializerMethodField() 

    def get_cost(self, obj): 
     value = ... # calculate your value 
     return value 

    class Meta: 
     model = Item 
     fields = ('url', 'owner', 'item_type', 'cost') 

參考:http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield

+0

這是完美的古斯塔沃!有沒有辦法從get_cost函數中的調用url訪問查詢參數,以便我可以執行一個取決於查詢的操作? –

+1

是的,你可以。從方法內部,你可以訪問'QueryDict':'self.context.get('request')。query_params' –

+1

非常感謝! –