如何获取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