【问题标题】:How to select only one row for one user in django?如何在 django 中为一个用户只选择一行?
【发布时间】:2020-01-10 13:18:36
【问题描述】:

我有一个消息数据库,它有 senderid、receiverid、消息和日期。现在我想获取我最近向每人发送一条最新消息(发送或接收)的用户列表。我怎样才能每人只得到一行消息。

我试过了,但这个游戏我所有的两个用户之间的消息,我只想要最新的消息。

querySet=MessageModel.objects.filter(
            Q(sUser=self.request.user) |     
            Q(rUser=self.request.user)
        )
        return querySet

但是这个游戏我两个用户之间的所有消息,我只想要最新的消息。

【问题讨论】:

    标签: django sqlite filter


    【解决方案1】:

    您可以对 QuerySet 进行排序,然后只抓取列表中的第一项。

    querySet = MessageModel.objects.filter(
        Q(sUser=self.request.user) |     
        Q(rUser=self.request.user)
    ).order_by('-date')[0]
    

    .order_by(...) 根据特定字段对 QuerySet 进行排序(隐含升序)。通过使用.order_by('-date')-date 表示我们想要一个降序,而不是默认的升序。然后我们可以使用[0] 获取查询集中的第一项。

    延伸阅读:Good ways to sort a queryset? - Django

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-07
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 2016-06-15
      • 1970-01-01
      相关资源
      最近更新 更多