【问题标题】:how to filter multiple messages in django如何在 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 目前的做法

标签: django django-models django-views django-forms django-templates


【解决方案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,
    }

【讨论】:

  • 我还有一个问题,不同的视图但相同的项目
猜你喜欢
  • 2013-02-07
  • 2010-12-28
  • 2013-01-10
  • 2023-03-19
  • 2021-10-15
  • 2020-05-11
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
相关资源
最近更新 更多