Django как добавить текущего вошедшего пользователя в request.data
Как добавить текущего зарегистрированного пользователя в request.data при выполнении post вызова для создания нового чата. Я пытался добавить его в request.data, но он является querydict и неизменяем. // 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)
У ListCreateAPIView
специально есть метод perform_create
, который вы можете переопределить . По умолчанию он просто делает:
def perform_create(self, serializer):
serializer.save()
Вы можете переопределить это, чтобы добавить дополнительные данные к serializer
, например:
def perform_create(self, serializer):
serializer.save(sender=self.request.user)
Избавьтесь от вашего метода post
, вы просто переопределяете и повторяете автоматику, для которой вы используете общие представления в первую очередь.