我有一个类似于Facebook的消息传递功能,因为每个人都可以向另一个人发送消息,创建一个新的消息线程,并且这两个人之间的每个后续消息都将出现在同一个线程中。我创建了一个'messages'数据表,它存储了所有消息以及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中这样做?
答案 0 :(得分:1)
如果您使用的是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')
答案 1 :(得分:0)
类似的东西:
from django.db.models import Max
from myapp.models import Message
Message.objects.annotate(message_date=Max('message_date')).values('id__max')