2

我有一个类似于 Facebook 的消息传递功能,每个人都可以向另一个人发送消息,创建一个新的消息线程,这两个人之间的每条后续消息都将出现在同一个线程上。我创建了一个“消息”数据表,其中存储了所有消息以及 thread_id,它看起来像这样:

id    message    sender_id    receiver_id    thread_id    message_date
1     Hello Bob  3            5              1            ...
2     Hello Jon  5            3              1            ...
3     Hi Jane    2            4              2            ...
4     Hi Sara    4            2              2            ...

我想使用 Django 的 ORM 只返回每个唯一 thread_id 的最新消息。我如何在 Django 中做到这一点?

4

2 回答 2

1

就像是:

from django.db.models import Max
from myapp.models import Message
Message.objects.annotate(message_date=Max('message_date')).values('id__max')
于 2013-09-19T17:08:32.290 回答
0

如果你在 Postgres 上,你可以做Message.objects.order_by('thread_id').distinct('thread_id')任何其他事情,你可以做这样的事情:

#first, grab all Threads
threads = Thread.objects.all().prefetch_related('message_set')

# loop through the threads, and get the latest message
for thread in threads:
    latest_message = thread.message_set.latest('message_date')
于 2013-09-19T17:14:02.307 回答