按最新记录排序查询集列表
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
我想在 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