在 Django 上用一个 SQL 请求列出用户及其最后一篇文章

Listing users with their last article with one SQL request on Django

class User(models.Model):
    name = models.CharField(max_length=255)

class Article(models.Model):
    user = models.ForeignKey(User)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

我需要列出所有用户及其上一篇文章。如何通过 一个数据库请求 获取它们?

# Something like:
{% for user in users %}:
    {{ user.full_name }}: {{ user.last_message }}
{% endfor %}

这是您的查询:

from django.db.models import OuterRef, Subquery


latest = Article.objects.filter(
    user=OuterRef('pk')
).order_by('-created_at')

users = User.objects.annotate(
    last_message=Subquery(latest.values("content")[:1])
)

for user in users:
    print(user.username, user.last_message)  

它为您提供用户最后的文章

P.s: 它只会执行一个查询。