按最新记录排序查询集列表

Ordering a list of querysets by latest record

我想在 Django 中实现一个私人消息传递功能,成员可以在一个页面中看到 his/her 条消息,以对话形式分隔。

成员发送或接收的最新消息的对话应显示在顶部。

我尝试了什么:

all_messages = Message.objects.filter(Q(sender=member) | Q(receiver=member))
other_members = all_messages.values_list("sender", flat=True).distinct()
conversations = []
for sender in other_members:
    if sender == member.id:
        try:        
            conversation = all_messages.filter(sender=member).exclude(receiver__in=other_members)
            conversations.append(conversation)
        except:
            continue
    else:
        conversation = all_messages.filter(Q(sender=sender, receiver=member) | Q(receiver=sender, sender=member))
        conversations.append(conversation)

这里的问题是,当会员收到一条新消息时,相关会话上升;但是当他发送一条新消息时,对话顺序没有改变。

总而言之,我怎样才能根据其中最近的最后一条消息对对话进行正确排序?

谢谢!

我要做的是拥有另一个模型,Conversation,它对参与对话的每个用户都有一个 ForeignKey。该模型还有一个 DateTimeField,last_updated,您可以在每次发布属于该对话的消息时更新它。这样您就可以按 last_updated.

对对话进行排序

当然需要在Message模型中添加对话ForeignKey