He intentado algo como esto, no 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']
Necesito una forma de poder acceder a request.user desde mi clase Serializer.
django
django-rest-framework
PythonIsGreat
fuente
fuente
CurrentUserDefault
es absolutamente ❤️ django-rest-framework.org/api-guide/validators/…Respuestas:
No puede acceder
request.user
directamente. Debe acceder al objeto de solicitud y luego obtener el atributo de usuario.Me gusta esto:
O para estar más seguro
Puede leer más sobre contexto adicional aquí
fuente
NameError: name 'self' is not defined
validate()
método, self.context es un diccionario vacío. ¿Por qué?En realidad, no tienes que preocuparte por el contexto. Hay una forma mucho mejor de hacerlo:
fuente
Como Igor mencionó en otra respuesta, el uso puede usar CurrentUserDefault. Si no desea anular el método de guardado solo para esto, use doc :
fuente
Puede pasar
request.user
al llamar.save(...)
dentro de una vista:Este es el modelo:
fuente
Necesita una pequeña edición en su serializador:
Aquí hay un ejemplo, usando conjuntos de vistas de mezcla de modelos. En el
create
método, puede encontrar la forma correcta de llamar al serializador. El método get_serializer llena el diccionario de contexto correctamente. Si necesita usar un serializador diferente al definido en el conjunto de vistas, consulte elupdate
método sobre cómo iniciar el serializador con el diccionario de contexto, que también pasa el objeto de solicitud al serializador.fuente