首页 > 解决方案 > Django 消息收件箱

问题描述

我对 Django 很陌生。我只是想创建一个消息传递应用程序,我想创建一个对话收件箱。再解释一下,有两个用户,如 user1 和 user2。我需要对 user1 和 user2 以及 user2 和 user3 之间的对话进行分类。然后我可以与 DRF 进行对话以进行 React。我查了这篇文章,但我很困惑。我想为此生成对话ID。但我不知道该怎么做。

我不想这样

JSON输出的一部分(相同用户之间的对话):

{
 "sender": 1,
 "reciever": 2,
 "msg_content": "Bu da benim yanıtım.",
 "sendtime": "2021-05-27T10:44:10.722370Z"
  },
 {
  "sender": 2,
  "reciever": 1,
  "msg_content": "Eh, yeter!",
  "sendtime": "2021-05-27T10:44:19.074474Z"
  },

我不知道如何摆脱这个问题。例如,您正在与 Alex 在 Whatsapp 上发送消息,而您的名字是 Joseph。您的应用程序主屏幕上应该只有一个对话,但有两个对话。一个是显示您给 Alex 的最后一条消息,另一个是 Alex 的最后一条消息。

模型.py

 class Message(models.Model):
         sender = models.ForeignKey(User, related_name="sender", on_delete=models.CASCADE, related_query_name='s')
         reciever = models.ForeignKey(User, related_name="reciever", on_delete=models.CASCADE, related_query_name='r')
         msg_content = models.TextField(max_length=500, blank=True)
         sendtime = models.DateTimeField(auto_now_add=True)

视图.py

class MessagesViewSet(viewsets.ModelViewSet):
    serializer_class = MessageSerializer
    authentication_classes = (JSONWebTokenAuthentication,)
    permission_classes = (IsAuthenticated,)

    def get_queryset(self):
        connected_user = self.request.user
        queryset = Message.objects \
            .filter(Q(sender=self.request.user) | Q(reciever=self.request.user)) \
            .order_by('sender', 'reciever', '-sendtime') \
            .distinct('sender', 'reciever')
        if (1==1):
                return queryset

序列化程序.py

   class MessageSerializer(serializers.ModelSerializer):
        class Meta:
            model = Message
            fields = ('id', 'sender','reciever','msg_content','sendtime')

标签: pythondjangodjango-rest-framework

解决方案


推荐阅读