Как получить запрос.Пользователь в сериализаторе 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']
Мне нужен способ доступа к запросу.пользователь из моего класса сериализатора.
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