2015-09-27 45 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)