简体   繁体   English

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

[英]Django - Select MAX of field of related query set

Say if I have models:说我是否有模型:

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

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

And I want to query all Users and annotate with both Count of events and MAX of Events.timestamp我想查询所有用户并使用事件计数和 Events.timestamp 的 MAX 进行注释

I know for count I can do:我知道我可以做到:

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

But how do I do max of a related queryset field?但是我如何做相关查询集字段的最大值? I want it to be a single query, like:我希望它是一个单一的查询,例如:

SELECT Users.*, MAX(Events.timestamp), COUNT(Events) FROM Users JOIN Events on Users.id = Events.user_id SELECT Users.*, MAX(Events.timestamp), COUNT(Events) FROM Users JOIN Events on Users.id = Events.user_id

You could use Query Expressions to achieve that.您可以使用查询表达式来实现这一点。 You might have to play around with the foreign key related name depending on your code, but it would result in something looking like this:根据您的代码,您可能必须使用与外键相关的名称,但这会导致如下所示:

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

You can try an aggregate query for this as follows:您可以尝试为此进行聚合查询,如下所示:

from django.db.models import Max

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

See details for the above code in Django documentation here请在此处查看Django 文档中上述代码的详细信息

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM