我有一个模型 Conversation
和一个模型 Message
.
型号Message
有一个对话外键、一个文本字段和一个日期字段。
如何列出所有对话并为每个对话获取最新消息和最新消息的日期?
我想它是这样的
Conversation.objects.annotate(last_message=Max('messages__date'))
但它只会给我最新的日期。我要
last_message
包含最后一条消息的文本和它的创建日期。也许我需要使用 prefetch_related?
最佳答案
从 Django 1.11 开始,你可以使用 Subqueries expressions :
latest_message = Subquery(Message.objects.filter(
conversation_id=OuterRef("id"),
).order_by("-date").values('value')[:1])
conversations = Conversation.objects.annotate(
latest_message=latest_message,
)
关于python - 用 Django 中最新的相关对象进行注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30528268/