Django rest framework 如何在django rest中获取请求用户数据到表示函数

Django rest framework 如何在django rest中获取请求用户数据到表示函数,django-rest-framework,Django Rest Framework,我需要访问request.user在to_representation函数中,我尝试了self.context['request']但是self.context是空字典。是否有任何方式可以访问request.user或将此数据推送到此函数 def to_representation(self, obj): print(self.context) #output is an empty dictionary {} 更新 class RetrieveView(generics.Retri

我需要访问
request.user
to_representation
函数中,我尝试了
self.context['request']
但是
self.context
是空字典。是否有任何方式可以访问
request.user
或将此数据推送到此函数

def to_representation(self, obj):
    print(self.context)

#output is an empty dictionary {}
更新

class RetrieveView(generics.RetrieveAPIView):
    def get(self, request, *args, **kwargs):
        uid = kwargs.get('uid')
        try:
            item = self.model.nodes.get(uid=uid)
        except Exception as e:
            # error response
        serializer = self.serializer_class(item)
        return HttpSuccessResponse(SuccessResponse(serializer.data).to_json(), status=status.HTTP_200_OK).send()


class TopicRetrieveView(single_result.RetrieveView):
    model = Topic
    serializer_class = topic.TopicSerializer

所有代码均来自django rest框架通用视图

serializer\u class
是我们在类定义中设置的属性,或者我们需要重写
get\u serializer\u class
函数。它将在此函数中处理:

def get_serializer_class(self):
    """
    Return the class to use for the serializer.
    Defaults to using `self.serializer_class`.

    You may want to override this if you need to provide different
    serializations depending on the incoming request.

    (Eg. admins get full serialization, others get basic serialization)
    """
    assert self.serializer_class is not None, (
        "'%s' should either include a `serializer_class` attribute, "
        "or override the `get_serializer_class()` method."
        % self.__class__.__name__
    )

    return self.serializer_class
def get_serializer(self, *args, **kwargs):
    """
    Return the serializer instance that should be used for validating and
    deserializing input, and for serializing output.
    """
    serializer_class = self.get_serializer_class()
    kwargs['context'] = self.get_serializer_context()
    return serializer_class(*args, **kwargs)
get\u serializer\u类
将用于
get\u serializer
函数:

def get_serializer_class(self):
    """
    Return the class to use for the serializer.
    Defaults to using `self.serializer_class`.

    You may want to override this if you need to provide different
    serializations depending on the incoming request.

    (Eg. admins get full serialization, others get basic serialization)
    """
    assert self.serializer_class is not None, (
        "'%s' should either include a `serializer_class` attribute, "
        "or override the `get_serializer_class()` method."
        % self.__class__.__name__
    )

    return self.serializer_class
def get_serializer(self, *args, **kwargs):
    """
    Return the serializer instance that should be used for validating and
    deserializing input, and for serializing output.
    """
    serializer_class = self.get_serializer_class()
    kwargs['context'] = self.get_serializer_context()
    return serializer_class(*args, **kwargs)
context
将由
get\u serializer\u context
函数填充

def get_serializer_context(self):
    """
    Extra context provided to the serializer class.
    """
    return {
        'request': self.request,
        'format': self.format_kwarg,
        'view': self
    }

所以正确的用法是
serializer=self.get\u serializer(item)
,因为它将使用
serializer\u class
对item进行序列化,并使用可能有用的额外信息填充
上下文
serializer=self.serializer\u类(item)
可用于仅序列化项,而无需更多额外信息

可以在使用序列化程序的位置添加视图实现吗?如果使用rest框架的某个视图,则应该正确设置上下文。所以我猜问题就出在这方面了。@fantairmartin这个更新好吗?多亏了@fantairmartin,我发现了我的错误,我需要使用self.get\u serializer()在self.serializer\u classYes中,我刚刚写了一个关于这个的回复。玩得高兴