and*_*dre 5 python django django-rest-framework
这对我来说有点奇怪,但现在有效.由于我是django/python中的新手,请告诉我你将如何解决这个问题.目标是创建一个Waypoint对象,其中Trip ID作为路径中的参数.旅行是Waypoint的外键.
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)
Run Code Online (Sandbox Code Playgroud)
在视图中,您可以覆盖 get_serializer_context 方法:
def get_serializer_context(self):
return {"trip_id": self.kwargs['trip_id']}
Run Code Online (Sandbox Code Playgroud)
然后在序列化程序中,您可以从 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)
Run Code Online (Sandbox Code Playgroud)
一种无需修改视图的简单方法是通过序列化程序的上下文访问视图:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1873 次 |
| 最近记录: |