提问者:小点点

如何在 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']

我需要一种能够从我的序列化类访问request.user的方法。


共3个答案

匿名用户

您无法直接访问 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']

匿名用户

正如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