2016-03-28 6 views
0

Ich verwende das Django-REST-Framework, um eine API zu erstellen. Ich möchte Daten aus mehr als einem Modell zu der serialisierten Ausgabe hinzufügen.Fügen Sie zusätzliche Daten zu den Modelldaten hinzu, die von einem Django-Serializer zurückgegeben werden

Im Moment sieht mein Serializer wie folgt aus:

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

Ich möchte ein

item_cost

Wert fr hinzufügen om mein Kostenmodell zur serialisierten Ausgabe (unterschiedliche Kosten für jeden Artikel im Artikelmodell). Ich möchte auch einen Unix-Timestamp-Wert zur serialisierten Ausgabe hinzufügen (ein Wert, der am Ende aller anderen serialisierten Ausgaben platziert wird).

Mein Serializer ist in einer Ansicht wie folgt verwendet:

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

Ich kann aus nicht funktionieren, wie die anderen Datenelementen in der serialisierte Ausgabe hinzuzufügen.

Antwort

2

Sie können ein SerializerMethodField von rest_framework.serializers verwenden und ein Verfahren schaffen, die den Wert Sie suchen, zurückgibt, zB:

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') 

Referenz in der Dokumentation: http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield

+0

Das perfekte Gustavo ist! Gibt es eine Möglichkeit, auf die Abfrageparameter von der aufrufenden URL in der Funktion "get_cost" zuzugreifen, damit ich eine Aktion ausführen kann, die von der Abfrage abhängt? –

+1

Ja, Sie können. Innerhalb der Methode können Sie auf das 'QueryDict' zugreifen:' self.context.get ('request'). Query_params' –

+1

Excellent thanks! –

Verwandte Themen