Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按最大值聚合后获取实际模型实例(Django)_Python_Django_Django Models_Django Queryset - Fatal编程技术网

Python 按最大值聚合后获取实际模型实例(Django)

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

鉴于以下模型:

浏览器 身份证件 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 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活动的选项,因为多个会话可以具有相同的浏览器。