python - Django - 选择相关查询集字段的 MAX
问题描述
假设我有模型:
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) FROM Users JOIN Events on 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')
)
推荐阅读
- blazor - 为什么我看不到对 DLL 的任何请求
- java - 读取模型上的轴突命令
- jenkins - 有没有办法在詹金斯开始执行管道之前验证管道文件
- reactjs - 我可以在反应中使用带有删除请求的 axios 发送表单数据吗?
- raspberry-pi - 树莓派 7 英寸触摸屏亮度控制 - 如何避免对 SD 卡的写入操作
- bash - 在 SQLPlus 中运行循环
- google-api - Google API 项目消失了
- python - 直接在 Python 中从网站 rar 文件夹中读取 csv 文件
- django - 从查询集中删除重复项的有效方法?
- python - 如何在一行中编写多个布尔表达式?