python - 用 Django 中最新的相关对象进行注释

标签 python django django-models django-queryset

我有一个模型 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/

相关文章:

django 1.9 createsuperuser 绕过密码验证检查

python - 如何避免 django "clashes with related m2m field"错误?

Django 在 ManyToMany 计数上过滤模型?

python - 如何在 Python Kivy 的 TextInput 字段中显示希伯来语文本

python - 递归后序遍历以在 Python 中列出?

python - 将 XML 从 URL 解析为 python 对象

django - 相同的 Django 项目不同的 GIT 存储库

python-3.x - Django 模型选择文本字段映射

python - 生成器函数在内部是如何工作的?

python - 持续更新Django页面内容