首页 文章

如何在Django-Rest-Framework序列化器中获取Request.User?

提问于
浏览
71

我尝试过这样的东西,它不起作用 .

class PostSerializer(serializers.ModelSerializer):

    class Meta:
        model = Post

    def save(self):
        user = self.context['request.user']
        title = self.validated_data['title']
        article = self.validated_data['article']

我需要一种能够从我的Serializer类访问request.user的方法 .

3 回答

  • 138

    您无法直接访问 request.user . 您需要访问请求对象,然后获取用户属性 .

    像这样:

    user =  self.context['request'].user
    

    或者更安全,

    user = None
    request = self.context.get("request")
    if request and hasattr(request, "user"):
        user = request.user
    

    更多关于extra context can be read here

  • 24

    正如Igor在其他答案中提到的,使用可以使用CurrentUserDefault . 如果您不想仅为此重写保存方法,请使用doc

    from rest_framework import serializers
    
    class PostSerializer(serializers.ModelSerializer):
        user = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault())
        class Meta:
            model = Post
    
  • 58

    实际上,您不必费心上下文 . 有一个更好的方法来做到这一点:

    from rest_framework.fields import CurrentUserDefault
    
    class PostSerializer(serializers.ModelSerializer):
    
        class Meta:
            model = Post
    
       def save(self):
            user = CurrentUserDefault()  # <= magic!
            title = self.validated_data['title']
            article = self.validated_data['article']
    

相关问题