Django在Serializ中获取kwargs

2024-10-03 00:28:27 发布

您现在位置:Python中文网/ 问答频道 /正文

这对我来说有点奇怪,但现在有效。由于我对django/python非常陌生,请告诉我您将如何解决这个问题。 目标是创建一个航路点对象,它在路径中有一个Trip id作为参数。行程是航路点的外键。在

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)

Tags: djangoselfiddatagetcreatecontextclass
2条回答

一种不必修改视图的简单方法是通过序列化程序的上下文访问视图:

def create(self, validated_data):
    trip_id = self.context.get('view').kwargs.get('trip_id')
    if trip_id is None:
        raise serializers.ValidationError("Must set the trip_id kwarg to use this serializer.")
    validated_data['trip'] = Trip.objects.get(pk=trip_id)
    return super(WaypointSerializer, self).create(validated_data)

在视图中,您可以重写get_serializer_上下文方法:

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

从序列化程序中获取自我语境公司名称:

^{pr2}$

相关问题 更多 >