通过最大值聚合后得到实际的模型实例(Django)



给定以下模型:

浏览器

id
1
2
3

我发现了以下解决方案,不幸的是,它使用了多个SELECT

query = Session.objects.filter(browser=OuterRef('pk')).order_by('-last_activity')
query = Browser.objects.annotate(session_id=Subquery(query.values('pk')[:1]))
query = Session.objects.filter(id__in=query.values('session_id'))
print(query)

我不太理解你的问题

latest_browser = Session.objects.order_by("-last_activity").first().browser

获取每个浏览器的最后一个会话:

latest_sessions = []
for browser in Browser.objects.all():
latest_sessions.append(browser.session_set.order_by("-last_activity").first())

或者如果你只想查询:

id_browsers = Session.objects.values_list('browser', flat=True).annotate(Max('last_activity'))
sessions = Session.objects.filter(browser_id__in=id_browsers)

最新更新