Как получить запрос.Пользователь в сериализаторе Django-Rest-Framework?



Я пробовал что-то вроде этого, это не работает.



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


Мне нужен способ доступа к запросу.пользователь из моего класса сериализатора.

717   3  

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

как Игорь уже упоминалось в других ответов, использование можете использовать CurrentUserDefault. Если вы не хотите переопределять метод save только для этого, то используйте doc:

from rest_framework import serializers

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

Comments

    Ничего не найдено.