给定以下模型:
浏览器
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)