Django-选择相关查询集的字段的最大值

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

如果有模特,请说:

class User(models.Model):
    name = ...
    dob = ...

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

而且我想查询所有用户并用事件计数和最大事件数.timestamp进行注释

我知道我可以做到:

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

但是我如何最大程度地增加一个相关的查询集字段?我希望它是一个查询,例如:

SELECT Users。*,MAX(Events.timestamp),COUNT(Events)从用户加入Users.id = Events.user_id上的事件

python django django-orm
1个回答
0
投票

您可以使用Query Expressions实现。您可能需要根据代码使用外键相关名称,但这会导致如下所示:

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')
)

0
投票

您可以尝试以下方法:

from django.db.models import Max

Users.objects.all().aggregate(Max('Events.timestamp'))

请参阅Django文档here中上述代码的详细信息

© www.soinside.com 2019 - 2024. All rights reserved.