我想在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)
这里的问题是当会员收到新消息时,相关会话就会上升;但是当他发送新消息时,会话顺序不会改变。
总结一下,如何根据最近的最后一条消息对对话进行正确排序?
谢谢!
答案 0 :(得分:1)
我要做的是让另一个模型Conversation对每个参与对话的用户都有一个ForeignKey。该模型还将具有DateTimeField,last_updated,您可以在每次发布属于该对话的消息时更新该日期。这样你就可以通过last_updated对对话进行排序。
当然,您需要将对话ForeignKey添加到Message模型。