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

时间:2018-03-16 15:11:31

标签: django sql-order-by django-queryset

我想在Django中实现一个私人消息传递功能,其中一个成员可以在一个页面中看到他/她的消息,分隔为对话。

与会员发送或接收的最新消息的对话应显示在最上方。

我尝试了什么:

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)

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

总结一下,如何根据最近的最后一条消息对对话进行正确排序?

谢谢!

1 个答案:

答案 0 :(得分:1)

我要做的是让另一个模型Conversation对每个参与对话的用户都有一个ForeignKey。该模型还将具有DateTimeField,last_updated,您可以在每次发布属于该对话的消息时更新该日期。这样你就可以通过last_updated对对话进行排序。

当然,您需要将对话ForeignKey添加到Message模型。

相关问题