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