python - 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')
解决方案
推荐阅读
- java - Java 中有任何可用于将 PDF 转换为 PDF/A 文件的开源库吗?
- apache - 代理错误 一个 URL 正常工作 另一个 URL 不工作
- r - 根据分组变量的级别拆分数据帧的一个变量值
- tensorflow - 我正在尝试手动实现 tf.nn.conv2d。对于深度 > 12,我得到不同的结果?
- java - 在外部 Spring Boot 配置中定义任意数量的数据源
- android - 从录制的视频中获取路径
- android - Nativescript Android - 应用程序进入后台后按钮没有反应
- r - 为什么我在使用最新版本的 R 和 Rstudio 时没有任何问题?
- php - 如何在 prestashop 中初始化一个新的控制器?
- javascript - 然后在承诺解决/拒绝之前执行块(Promise.allSettled)