Python 按最大值聚合后获取实际模型实例(Django)
鉴于以下模型: 浏览器 身份证件 1. 2. 3.Python 按最大值聚合后获取实际模型实例(Django),python,django,django-models,django-queryset,Python,Django,Django Models,Django Queryset,鉴于以下模型: 浏览器 身份证件 1. 2. 3. 我不太明白你的问题 latest\u browser=Session.objects.order\u by(“-last\u activity”).first().browser 要获取每个浏览器的最后一个会话,请执行以下操作: latest_sessions=[] 对于browser.objects.all()中的浏览器: 最新会话.append(browser.session\u set.order\u by(“-last\u activ
我不太明白你的问题
latest\u browser=Session.objects.order\u by(“-last\u activity”).first().browser
要获取每个浏览器的最后一个会话,请执行以下操作:
latest_sessions=[]
对于browser.objects.all()中的浏览器:
最新会话.append(browser.session\u set.order\u by(“-last\u activity”).first())
或者,如果您只需要一个查询:
id\u browsers=Session.objects.values\u list('browser',flat=True).注释(Max('last\u activity'))
sessions=Session.objects.filter(browser\u id\u in=id\u browsers)
我找到了以下解决方案,不幸的是它使用了多个SELECT
s
query=Session.objects.filter(browser=OuterRef('pk')).order\u by('-last\u activity'))
query=Browser.objects.annotate(session_id=Subquery(query.values('pk')[:1]))
query=Session.objects.filter(id\u in=query.values('Session\u id'))
打印(查询)
我希望避免在循环中进行多个查询。使用distinct()
的查询解决方案不起作用,列出了所有会话
。我更新了我的答案,你能检查一下吗?我得到了django.db.utils.OperationalError:sub select返回2列-预期为1列
。此外,这不会选择具有最新的last\u活动的选项,因为多个会话可以具有相同的浏览器。