【发布时间】:2022-12-07 07:37:14
【问题描述】:
假设我有以下 Django 模型:
class Team(models.Model):
name = models.CharField(max_length=255)
created_at = models.DateTimeField(auto_now_add=True)
我想编写一个查询来获取每个团队名称的最新 N 条记录。
如果 N=1,则查询非常简单(假设我使用的是 postgres,因为它是唯一支持 distinct(*fields) 的数据库):
Team.objects.order_by("name", "-created_at").distinct("name")
如果 N 大于 1(比方说 3),那么它就变得棘手了。我如何在 Django 中编写此查询?
【问题讨论】:
-
如果我理解正确的话:
Team.objects.filter(name='super_team').count() -
不,我不想数数。我想要实际的 N 条最新记录。
-
你关心速度吗?
-
请试一试
Team.objects.all().values('name').annotate(total_n=Count('name')).order_by('total_n') -
@TarasMykhalchuk 我希望它快点。不幸的是,您的解决方案没有奏效。
标签: django django-models django-queryset