Пробовал что-то подобное, не получается.
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 из моего класса Serializer.
django
django-rest-framework
PythonIsGreat
источник
источник
CurrentUserDefault
абсолютно ❤️ django-rest-framework.org/api-guide/validators/…Ответы:
Вы не можете получить доступ к
request.user
прямой файлу. Вам нужно получить доступ к объекту запроса, а затем получить атрибут пользователя.Как это:
Или чтобы быть в безопасности,
Подробнее о дополнительном контексте можно прочитать здесь
источник
NameError: name 'self' is not defined
validate()
method self.context - это пустой dict. Зачем?На самом деле, вам не нужно беспокоиться о контексте. Есть гораздо лучший способ сделать это:
источник
Как сказал Игорь в другом ответе, можно использовать CurrentUserDefault. Если вы не хотите переопределять метод сохранения только для этого, используйте doc :
источник
Вы можете передать
request.user
при вызове.save(...)
внутри представления:Это модель:
источник
Вам нужно небольшое изменение в сериализаторе:
Вот пример использования наборов представлений для смешивания моделей. В
create
методе вы можете найти правильный способ вызова сериализатора. get_serializer правильно заполняет контекстный словарь. Если вам нужно использовать другой сериализатор, определенный в наборе представлений, см.update
Метод о том, как запустить сериализатор с контекстным словарем, который также передает объект запроса сериализатору.источник