问题标签 [django-subquery]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
django - Django 1.11 注释子查询聚合
这是一个前沿功能,我目前正在使用它并很快就流血了。我想将子查询聚合注释到现有查询集上。在 1.11 之前执行此操作意味着自定义 SQL 或锤击数据库。这是 this 的文档,以及其中的示例:
他们在汇总上进行注释,这对我来说似乎很奇怪,但无论如何。
我正在为此苦苦挣扎,所以我将其直接还原为我拥有数据的最简单的真实示例。我有Carpark
包含许多Space
s 的 s。如果这让你更快乐,请使用Book→Author
,但 - 现在 - 我只想使用Subquery
* 来注释相关模型的计数。
这给了我一个可爱的印象ProgrammingError: more than one row returned by a subquery used as an expression
,在我的脑海中,这个错误非常有意义。子查询返回带有注释总数的空格列表。
这个例子表明某种魔法会发生,我最终会得到一个可以使用的数字。但这不是在这里发生的吗?如何注释聚合子查询数据?
嗯,我的查询的 SQL 中添加了一些东西……
我建立了一个新的停车场/空间模型并且它工作。所以下一步是找出是什么毒害了我的 SQL。在 Laurent 的建议下,我查看了 SQL 并试图使其更像他们在答案中发布的版本。这就是我发现真正问题的地方:
我已经突出显示了它,但它是那个子查询的GROUP BY ... U0."space"
. 出于某种原因,它正在重新调整两者。调查仍在继续。
编辑 2:好的,只要查看子查询 SQL,我就可以通过 ☹</p> 看到第二组
编辑3:好的!这两种模型都有排序顺序。这些正在执行到子查询。正是这些订单使我的查询膨胀并破坏了它。
我想这可能是 Django 中的一个错误,但没有在这两个模型上删除 Meta-order_by,有什么方法可以在查询时取消对查询的排序?
*我知道我可以为这个例子添加一个 Count 注释。我使用它的真正目的是一个更复杂的过滤器计数,但我什至无法让它工作。
django - Django中的嵌套子查询
使用子查询进入深水区。我有一套Carpark
s。Carpark
s 有多个Booking
s。Bookings有很多BarrierActivity
记录,就是关口的各种来来去去的事件。这些都是堆栈中的简单 FK。
预订可能会到达,但屏障摄像头无法识别它。一名工作人员会给他们打电话,但这意味着系统由于某种原因失败了。这就是我在这里想要做的。算出我的预订中有多少是通过自动方式获得的。我知道还有很多其他方法可以做到这一点,但我想用一个基于子查询的查询集来做到这一点。
我的目标相当简单。BarrierActivity
注释 0 或 1 以显示每个是否存在“条目” Booking
。注释这些值的平均值,每Carpark
。
第一部分很好。我可以在和之间做一个简单的Exists()
,然后每个预订都有 0 或 1:BarrierActivity
Booking
再一次,这很好用。但是一旦我尝试扩大另一层(所以看Carpark
而不是Booking
)......
...我得到了 Subquery-error-of-doom: more than one row returned by a subquery used as an expression
。bookings
子查询显然返回了太多,但我如何在它到达最外层子查询之前聚合它?
我已经尝试了很多事情,但是这里将平均值重新组织到子查询中。同样的错误:
django - 带有 OuterRef 的 Django 子查询和注释
我OuterRef
在 Django 1.11 子查询中使用 annotate() 时遇到问题。示例模型:
现在一个带有子查询的查询(这实际上没有任何意义,但说明了我的问题):
这给出了以下错误:
不能根据 OuterRef 注释子查询吗?
更新#1
找到了一个解决方法,可以让我现在继续前进,但这并不好。
更改OuterRef
为使用自定义表达式
产量
django - Django 子查询抛出“用作表达式的子查询返回的不止一行”
我最近升级到 django 1.11,我想使用新发布的Subquery exrpession
功能。有以下两种型号
我想获得一个项目对象的查询集,并用每个项目的私人捐赠值的总和进行注释。我知道,还有其他方法可以做到这一点,我已经为我的应用程序提供了一个可行的解决方案,但是由于我正在学习此功能,所以我尝试了以下查询
但是上面的查询抛出异常
唯一成功运行的查询是下面的查询。
但是,如果我在“private_donations”查询中选择“项目”属性以外的任何内容,则会引发相同的错误
这是堆栈跟踪
任何指导将不胜感激。提前致谢。
django - Django 条件子查询聚合
我的模型结构的一个简化示例是
现在我想显示一个显示公司的表格,其中一列将包含某种类型的部门数量,例如type=10
。目前,这是通过Corporation
模型上的帮助器来实现的,用于检索那些,例如
这里的问题是,由于 N+1 问题,这绝对会破坏性能。
我试图用select_related
、prefetch_related
、annotate
和来解决这个问题subquery
,但我无法得到我需要的结果。
理想情况下,Corporation
查询集中的每个都应该用一个整数注释,该整数type_10_count
反映了该类型部门的数量。
我确信我可以用原始 sql 做一些事情.extra()
,但是文档宣布它将被弃用(我在 Django 1.11 上)
编辑:原始 sql 解决方案示例
django - 子查询字段的总和 django
我有以下子查询:
cost
然后我需要用每个子查询返回的值的总和来注释我的 QuerySet 。怎么做?在 Sum 中包装子查询仅返回每个子查询的第一个元素。
python - 使用子查询注释计数
请帮助我,我已经坚持了太久了:(
我想做的事:
我有这两个模型:
我想用具有该专业的医生数量来注释查询集中的所有专业。
到目前为止我的解决方案:
我经历了一个循环,我做了一个简单的: Doctor.objects.filter(specialization=spec).count()
但是事实证明这太慢且效率低下。我读的越多,我就越意识到使用SubQuery
这里来过滤OuterRef
专业化的医生是有意义的。这就是我想出的:
对于每个专业,我得到的输出只有 1。代码只是用它注释每个医生对象,specialization_id
然后注释该组中的计数,这意味着它将是 1。
不幸的是,这对我来说并不完全有意义。在我最初的尝试中,我使用了一个聚合来计数,虽然它本身可以工作,但它不能作为 a 工作SubQuery
,我得到了这个错误:
This queryset contains a reference to an outer query and may only be used in a subquery.
我之前发布过这个问题,有人建议这样做Specialization.objects.annotate(count=Count("doctor"))
但是,这不起作用,因为我需要计算特定的医生查询集。
我已经关注了这些链接
但是,我没有得到相同的结果:
https://docs.djangoproject.com/en/1.11/ref/models/expressions/
https://medium.com/@hansonkd/the-dramatic-benefits-of-django-subqueries-and-annotations-4195e0dafb16
如果您有任何问题可以更清楚地说明这一点,请告诉我。
python - Django过滤任何日期范围包含的日期
我正在尝试过滤具有DateField
(日期)的模型以检索queryset
其日期在列表中的任何一个中的实例,DateRanges
但我正在努力找出我需要的确切逻辑。
例如,如果我有以下模型:
并且我创建了 3 个不同的日期范围,如何获取日期在这 3 个日期范围之一的所有游戏的列表?
我知道我可以遍历范围并为此使用链式Q()
过滤器,但我需要将这一切都放在一个大的注释中,queryset
这将不得不使用子查询,这样就不起作用了。
我目前的努力是这样的:-
但这不起作用,因为contained_by
它与一个日期范围进行比较,而是一个queryset
日期范围。
感觉就像我很接近,但我一定错过了一些愚蠢的事情。
有任何想法吗?
python - 如何在 django 中获取内部连接的表别名
我使用 django 2.1、python 3.6 和 SQL Server 2012 作为后端。我有以下型号:
如何实现以下 SQL 查询:
到目前为止我所拥有的:
这会产生正确的过滤查询集。但是我怎样才能得到正确的字段呢?
我尝试使用annotate
功能,但失败了。使用文档中描述的 django 会Subquery
产生数据库错误,因为 SQL Server 不支持该SELECT
部分中的子查询。
有什么建议吗?谢谢!
django - 如何在 Django 中执行双步子查询?
我有以下型号:
如您所见,Journal
模型与模型相关,而Ledger
模型的Foreignkey
关系与模型进一步相关Group
。
我的场景有点复杂。
我想过滤Group
对象及其余额(余额是它们的总数和总数之间的差异Debit
Credit
)。
我想过滤总组名称以及总和总的减法Debit
.. Credit
(Debit
并且Credit
是Journal
模型的字段)。
谁能帮我弄清楚上述情况。
我之前尝试Subqueries
过,但Django
还没有做两步Subquery
。Django
任何解决方案都会有所帮助。
谢谢