我想使用 Django ORM 获得一个
QuerySet
,其中包含每篇文章的所有 最新评论。评论可以通过 when
字段进行排序。假设以下示例:
class Post(models.Model):
name = models.TextField()
class Comment(models.Model):
title = models.TextField()
when = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey(Post, on_delete=models.CASCADE)
这可以在原始 SQL 中实现,所以我认为 Django 也可能有自己的方式。我想避免使用原始查询(Django 文档不鼓励)。我无法将
distinct()
与字段名称一起使用,因为我使用的是 MySQL。 任何指示表示赞赏。
Post.objects.annotate(
latest_comment=FilteredRelation(
'comment_set',
condition__pk=Q(
comment=Subquery(
Comment.objects.filter(post=OuterRef('pk'))
.order_by('-when')
.values('pk')[:1]
),
),
),
).select_related('latest_comment')