首页 > 解决方案 > 为什么Django rest框架中的“HyperlinkedRelatedField”需要它的视图来返回“request”参数作为上下文?

问题描述

我是 DRF 的新手。在像这样定义HyperlinkedRelatedField序列化程序类时:

    class JournalistSerializer(serializers.ModelSerializer):
       articles = serializers.HyperlinkedRelatedField(view_name="article- 
       detail")

我收到以下错误:

     `HyperlinkedRelatedField` requires the request in the serializer 
      context. Add `context={'request': request}` when instantiating the 
      serializer.

当我添加context={'request': request}相关的 APIView 类时:

    class JournalistListCreateAPIView(APIView):

    def get(self,request):
        journalist = Journalist.objects.all()
        serializer = JournalistSerializer(journalist,many=True,context= 
        {'request':request})
        return Response(serializer.data)

APIView 中的超链接工作正常。但我不明白为什么在实例化序列化程序时必须发送请求。请帮我理解。

标签: pythondjangodjango-rest-framework

解决方案


它确实需要request在上下文中构建绝对 URL

更具体地说,它使用get_url序列化程序方法

def get_url(self, obj, view_name, request, format):
    ...
    return self.reverse(view_name, kwargs=kwargs, request=request, format=format)

推荐阅读