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

我试过这样的东西,这是行不通的。

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的方法。

你不能直接访问request.user 。 您需要访问请求对象,然后获取用户属性。

喜欢这个:

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

或者为了更安全,

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

更多关于额外的上下文可以在这里阅读

其实,你不必打扰上下文。 有一个更好的方法来做到这一点:

 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'] 

正如伊戈尔在其他答案中提到的,使用可以使用CurrentUserDefault。 如果您不想为此重写save方法,请使用doc :

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