使用 ORM 和 MySQL 的 Django 不同和 group_by 查询

问题描述 投票:0回答:1

我想使用 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。
任何指示表示赞赏。

mysql django
1个回答
0
投票
我们可以在这里使用

FilteredRelation

 [Django-doc]

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')
    
© www.soinside.com 2019 - 2024. All rights reserved.