Já tentei algo assim, não funciona.
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']
Preciso de uma maneira de acessar request.user da minha classe Serializer.
django
django-rest-framework
PythonIsGreat
fonte
fonte
CurrentUserDefault
é absolutamente ❤️ django-rest-framework.org/api-guide/validators/…Respostas:
Você não pode acessar o
request.user
diretamente. Você precisa acessar o objeto de solicitação e, em seguida, buscar o atributo do usuário.Como isso:
Ou para ser mais seguro,
Mais sobre contexto extra pode ser lido aqui
fonte
NameError: name 'self' is not defined
validate()
método, self.context é um dict vazio. Por quê?Na verdade, você não precisa se preocupar com o contexto. Existe uma maneira muito melhor de fazer isso:
fonte
Como Igor mencionou em outra resposta, use pode usar CurrentUserDefault. Se você não deseja substituir o método de salvamento apenas por isso, use doc :
fonte
Você pode passar
request.user
ao chamar.save(...)
dentro de uma visualização:Este é o modelo:
fonte
Você precisa de uma pequena edição em seu serializador:
Aqui está um exemplo, usando conjuntos de visualizações de combinação de modelo. No
create
método, você pode encontrar a maneira adequada de chamar o serializador. O método get_serializer preenche o dicionário de contexto corretamente. Se você precisar usar um serializador diferente do definido no conjunto de visualizações, consulte oupdate
método sobre como iniciar o serializador com dicionário de contexto, que também passa o objeto de solicitação para o serializador.fonte