0

我想覆盖序列化程序的to_representation. 如何在其中传递请求对象以便构建 url?

class FooSerializer(serializers.ModelSerializer):
    name = serializers.StringRelatedField()
    link = serializers.SerializerMethodField()

    class Meta:
        model = Foo
        fields = ('name', 'link')

    def to_representation(self, instance):
        request = self.context.get('request') # Get request here
        return {'foo': request.build_absolute_uri(
                '/apps/foo/{}'.format(
                object.id))
        }
4

1 回答 1

2

将以下方法添加到您的视图集中,以便能够访问序列化程序中的请求:

def get_serializer_context(self):
    context = {'request': self.request}
    return context

如果您只是想将 URL 添加到序列化程序,则可以将序列化程序标识字段添加到序列化程序,而不是覆盖 to_representation 方法:

url = serializers.HyperlinkedIdentityField(
    view_name='foo-detail',
    lookup_url_kwarg='pk'
)
于 2021-05-04T14:52:48.043 回答