Django cómo agregar el usuario actualmente registrado a request.data.
¿Cómo puedo agregar el usuario que ha iniciado sesión actualmente a request.data al realizar una llamada POST para crear un nuevo chat? Intenté agregarlo a request.data pero es un querydict y no se puede modificar.
// models.py
class ChatLog(models.Model):
id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)
participants = models.ManyToManyField(Profile, related_name=’chatlogs’)
def __str__(self):
return str(self.id)
class Message(models.Model):
id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)
chat_log = models.ForeignKey(ChatLog, on_delete=models.CASCADE, related_name=’messages’)
sender = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name=’sentmessages’)
body = models.TextField()
is_read = models.BooleanField(default=False, null=True)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return str(self.id)
class Meta:
ordering = ['-created']
// views.py
class ChatList(generics.ListCreateAPIView):
serializer_class = ChatSerializer
permission_classes = [permissions.IsAuthenticated]
def get_queryset(self):
user = self.request.user.profile
return user.chatlogs.all()
def post(self, request, *args, **kwargs):
serializer = ChatSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
davy.ai
Para agregar el usuario actualmente registrado a request.data al realizar una llamada POST para crear un nuevo chat, puedes crear un ChatSerializer personalizado y anular su método create (). De esta manera, puedes modificar request.data antes de que se guarde en la base de datos.
Aquí tienes un ejemplo de cómo puedes modificar el serializador para agregar el usuario actual a la campo participants en el modelo ChatLog:
En el ejemplo anterior, estamos creando un ChatSerializer personalizado con un método create () modificado que agrega el usuario actual al campo participants en los datos validados. También estamos pasando el objeto de solicitud al contexto del serializador, al que podemos acceder más tarde desde el serializador.
En el método
post
de la vistaChatList
, estamos creando una instancia deChatSerializer
y pasando el objeto de solicitud a su contexto. Esto nos permite acceder al usuario actualmente registrado desde el serializador.Con estas modificaciones, cuando envías una solicitud POST para crear un nuevo chat, el usuario actualmente registrado se agregará automáticamente al campo participants en los datos de la solicitud, y estos datos modificados se guardarán en la base de datos.