You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何用单次SQL请求查询所有用户及其最新发布的文章

Django 单查询获取所有用户及对应最新文章

实现代码

首先导入必要的ORM工具:

from django.db.models import F, OuterRef, Subquery

然后执行查询即可:

# 构造子查询:匹配对应用户,按发布时间倒序取最新一篇文章的内容
latest_article_subquery = Article.objects.filter(
    user=OuterRef("pk")
).order_by("-created_at").values("content")[:1]

# 给User对象注解上模板需要的字段,全程仅执行1次SQL查询
users = User.objects.annotate(
    full_name=F("name"),  # 将原有name字段别名成模板需要的full_name变量
    last_message=Subquery(latest_article_subquery)
)

使用说明

  • 该方案通过Subquery+OuterRef的组合将子查询合并到主查询逻辑中,全程只会触发一次数据库请求,完全符合你的要求。
  • 没有发布过文章的用户,last_message字段值会为None,你可以在模板中自行添加条件判断做展示兼容。
  • 查询得到的users查询集可以直接放到模板上下文里,用你给出的遍历代码直接渲染即可,完全匹配你需要的输出格式。

如果你需要同时获取最新文章的其他字段(比如发布时间),只需要修改子查询的values参数,再新增对应的注解字段即可。

内容的提问来源于stack exchange,提问作者Efraim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 02:00:04