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