如何在 django 中过滤多条消息

Posted

技术标签:

【中文标题】如何在 django 中过滤多条消息【英文标题】:how to filter multiple messages in django 【发布时间】:2022-01-17 15:38:44 【问题描述】:

所以我最近对消息进行了过滤,以便在两个人之间传递所有消息


def pmessage(request, pk):
     user = User.objects.get(id=pk)
     message = pm.objects.filter(Q(receiver=request.user, sender=user) | Q(receiver=user, sender=request.user))
     form = dmform()
     context = 
          'message' : message,
          'form' : form,
     

它有效,只是它将消息按类别分组,即,它会先列出满足一个条件的所有消息,而不管哪个消息先出现,这违背了我的目标。

谢谢你

已编辑 下午型号

class pm(models.Model):
    sender = models.ForeignKey(User, related_name='sender', on_delete=models.CASCADE)
    receiver = models.ForeignKey(User, related_name='receiver', on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)    body = models.TextField()
    unread = models.BooleanField(default=False)

    def __str__(self):
        return f'sender:self.sender - receiver:self.receiver - self.body'

【问题讨论】:

你能分享pm的模型吗? 我编辑了最初的问题以添加 pm 模型 所以您想检索按created 日期排序的消息? (或updated)? 已创建,但它应该以对话的方式出现,我给你发了一条消息'a',你回复了'b'和'c',然后我发送了'd',所以它应该是 A,B ,C,D 而不是 A,D,B,C 目前的做法 【参考方案1】:

您可以使用.order_by('created')订购消息:

def pmessage(request, pk):
    message = pm.objects.filter(
        Q(receiver=request.user, sender_id=pk) |
        Q(receiver_id=pk, sender=request.user)
    ).order_by('created')
    form = dmform()
    context = 
        'message' : message,
        'form' : form,
    

【讨论】:

我还有一个问题,不同的视图但相同的项目

以上是关于如何在 django 中过滤多条消息的主要内容,如果未能解决你的问题,请参考以下文章

如何在 google Pub/Sub 中快速发布多条消息?

如何在 GCP Pub/sub 中修复来自推送订阅的多条消息

如何在 django 中按日期范围过滤记录?

如何在 django 中使用过滤器

在 django 中,我如何过滤或排除多个东西?

如何在 Django 查询集过滤中执行不等于?