Django 如何在Rest框架中将请求传递给字段序列化程序?

Django 如何在Rest框架中将请求传递给字段序列化程序?,django,django-rest-framework,Django,Django Rest Framework,嗨,我正在使用一个字段序列化程序来序列化PK字段,然后将其反序列化为对象。序列化程序中有一个SerializerMethodField,用于构建自定义url。当我通过序列化它自己的记录来使用它自己时,它就工作了。但是,当我将其作为FieldSerializer使用到其他序列化程序时,请求对象不会被传递 class TelemetryFileSerializer(serializers.ModelSerializer): telemetry_type = serializers.SlugR

嗨,我正在使用一个字段序列化程序来序列化PK字段,然后将其反序列化为对象。序列化程序中有一个
SerializerMethodField
,用于构建自定义url。当我通过序列化它自己的记录来使用它自己时,它就工作了。但是,当我将其作为
FieldSerializer
使用到其他序列化程序时,
请求
对象不会被传递

class TelemetryFileSerializer(serializers.ModelSerializer):
    telemetry_type = serializers.SlugRelatedField(
        slug_field='name', queryset=TelemetryFileType.objects.all())
    receiving_station = serializers.SlugRelatedField(
        required=False, slug_field='name', queryset=ReceivingStation.objects.all())
    link = serializers.SerializerMethodField()

    class Meta:
        model = TelemetryFile
        fields = '__all__'

    def get_link(self, object):
        request = self.context.get('request')
        print(self.context)   # request is not passed here from RawImageSerializer/TelemetryFileField
        return request.build_absolute_uri('/data_management/telemetry_files/{}'.format(object.id))


class TelemetryFileField(serializers.PrimaryKeyRelatedField):

    def to_representation(self, value):
        pk = super(TelemetryFileField, self).to_representation(value)
        item = TelemetryFile.objects.get(pk=pk)
        serializer = TelemetryFileSerializer(item)
        return serializer.data


class RawImageSerializer(serializers.ModelSerializer):
    from_telemetry_file = TelemetryFileField(queryset=TelemetryFile.objects.all())
    link = serializers.SerializerMethodField()
我想传递自己的请求,以便能够创建它的url。 这是使用
rawmageserializer
时返回的值:

AttributeError:“非类型”对象没有属性 “构建绝对uri”


必须有一种方法将
请求
从序列化程序传递到另一个…

我不确定这是否是正确的解决方案,但添加此项解决了我的问题

class TelemetryFileField(serializers.PrimaryKeyRelatedField):

    def to_representation(self, value):
        print("value", self.context)
        pk = super(TelemetryFileField, self).to_representation(value)
        item = TelemetryFile.objects.get(pk=pk)
        serializer = TelemetryFileSerializer(item, context=self.context) # context was added
        return serializer.data