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