列出了用户在Django上的最后一篇文章和一个SQL请求


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 %}
  • John Doe:Lorem ipsum dolor坐amet,consectetur adipiscing elit
  • 杰克·卡尔:Lorem ipsum dolor坐amet,consectetur adipiscing elit
  • 马尔科姆·戈登:Lorem ipsum悲哀坐amet,consectetur adipiscing elit
  • Ingredia Ameter:Lorem ipsum悲哀坐amet,consectetur adipiscing elit

这是您的查询:

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:它将只执行一个查询。

相关内容

  • 没有找到相关文章

最新更新