Django-选择相关查询集字段的MAX



假设我有型号:

class User(models.Model):
name = ...
dob = ...
class Event(models.Model):
user = models.ForeignKey(User, ...)
timestamp = models.DateTimeField()

我想查询所有用户,并用事件计数和事件最大值进行注释。时间戳

我知道我能做的计数:

Users.objects.all().annotate(event_count=models.Count('event_set'))

但是,如何最大化相关查询集字段?我希望它是一个单一的查询,比如:

SELECT Users.*,MAX(Events.timestamp(,COUNT(Events(FROM用户在Users.id=Events.user_id 上加入事件

您可以使用查询表达式来实现这一点。根据您的代码,您可能需要使用与外键相关的名称,但这会导致如下结果:

from django.db.models import Count, F, Func,
Users.objects.all().annotate(
event_count=Count('event_set'), 
max_timestamp=Func(F('event_set__timestamp'), function='MAX')
)

您可以尝试以下聚合查询:

from django.db.models import Max
Users.objects.all().aggregate(Max('Events.timestamp'))

在Django文档中查看以上代码的详细信息

最新更新