如何在Django中仅为一个用户选择一行?

时间:2019-09-08 14:16:47

标签: django sqlite filter

我有一个消息数据库,它具有senderid,receiverid,消息和日期。现在,我想获取我最近发过消息的用户列表,其中每人有一封最新消息(发送或接收)。我如何才能每人只收到一行消息。

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

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

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

1 个答案:

答案 0 :(得分:0)

您可以对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]来获取QuerySet中的第一项。

进一步阅读:Good ways to sort a queryset? - Django