2015-09-27 33 views
1

這對我來說似乎有點奇怪,但現在起作用。由於我在django/python中很新,請告訴我你將如何解決這個問題。 目標是創建一個Waypoint對象,該對象在路徑中具有Trip ID作爲參數。 Trippoint是Waypoint的外籍人士。Django 1.8在串行器中獲得kwargs

class WaypointSerializer(serializers.ModelSerializer): 
    trip = serializers.PrimaryKeyRelatedField(read_only=True) 

    class Meta: 
     model = Waypoint 
     fields = ('id', 'trip', 'position', 'time') 

    def create(self, validated_data): 
     trip_id = self.context.get('request').parser_context['kwargs']['pk'] 
     validated_data['trip'] = Trip.objects.get(pk=trip_id) 
     return super(WaypointSerializer, self).create(validated_data) 
+0

你爲什麼要這麼做?你的序列化程序中有一個「trip」字段,所以它將在validated_data中。 –

+0

端點類似於「/ trips/5545/waypoint /」並且我不想發送脫扣對象附加的 – andre

+0

,當然不是id,因爲路徑已經包含了它。我想在身體發送的唯一東西是位置和時間(id將在插入對象時生成) – andre

回答

1

鑑於你可以覆蓋get_serializer_context方法:

def get_serializer_context(self): 
    return {"trip_id": self.kwargs['trip_id']} 

,然後在串行器,你可以從self.context得到它:

def create(self, validated_data): 
    trip_id = self.context["trip_id"] 
    validated_data['trip'] = Trip.objects.get(pk=trip_id) 
    return super(WaypointSerializer, self).create(validated_data)