首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Django-Rest-Framework序列化程序中获取Request.User?

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

Stack Overflow用户
提问于 2015-05-13 08:28:25
回答 11查看 99.2K关注 0票数 175

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

代码语言:javascript
复制
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的方法。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2015-05-13 09:06:59

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

如下所示:

代码语言:javascript
复制
user =  self.context['request'].user

或者为了安全起见,

代码语言:javascript
复制
user = None
request = self.context.get("request")
if request and hasattr(request, "user"):
    user = request.user

有关extra context can be read here的更多信息

票数 309
EN

Stack Overflow用户

发布于 2016-01-24 19:41:58

实际上,您不必费心考虑上下文。有一种更好的方法:

代码语言:javascript
复制
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']
票数 82
EN

Stack Overflow用户

发布于 2016-05-04 17:00:31

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

代码语言:javascript
复制
from rest_framework import serializers

class PostSerializer(serializers.ModelSerializer):
    user = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault())
    class Meta:
        model = Post
票数 49
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30203652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档