问题标签 [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.

0 投票
7 回答
50060 浏览

django - Django 1.11 注释子查询聚合

这是一个前沿功能,我目前正在使用它并很快就流血了。我想将子查询聚合注释到现有查询集上。在 1.11 之前执行此操作意味着自定义 SQL 或锤击数据库。这是 this 的文档,以及其中的示例:

他们在汇总上进行注释,这对我来说似乎很奇怪,但无论如何。

我正在为此苦苦挣扎,所以我将其直接还原为我拥有数据的最简单的真实示例。我有Carpark包含许多Spaces 的 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 注释。我使用它的真正目的是一个更复杂的过滤器计数,但我什至无法让它工作。

0 投票
1 回答
3131 浏览

django - Django中的嵌套子查询

使用子查询进入深水区。我有一套Carparks。Carparks 有多个Bookings。Bookings有很多BarrierActivity记录,就是关口的各种来来去去的事件。这些都是堆栈中的简单 FK。

预订可能会到达,但屏障摄像头无法识别它。一名工作人员会给他们打电话,但这意味着系统由于某种原因失败了。这就是我在这里想要做的。算出我的预订中有多少是通过自动方式获得的。我知道还有很多其他方法可以做到这一点,但我想用一个基于子查询的查询集来做到这一点。

我的目标相当简单。BarrierActivity注释 0 或 1 以显示每个是否存在“条目” Booking。注释这些值的平均值,每Carpark

第一部分很好。我可以在和之间做一个简单的Exists(),然后每个预订都有 0 或 1:BarrierActivityBooking

再一次,这很好用。但是一旦我尝试扩大另一层(所以看Carpark而不是Booking)......

...我得到了 Subquery-error-of-doom: more than one row returned by a subquery used as an expressionbookings子查询显然返回了太多,但我如何在它到达最外层子查询之前聚合它?


我已经尝试了很多事情,但是这里将平均值重新组织到子查询中。同样的错误:

0 投票
2 回答
7418 浏览

django - 带有 OuterRef 的 Django 子查询和注释

OuterRef在 Django 1.11 子查询中使用 annotate() 时遇到问题。示例模型:

现在一个带有子查询的查询(这实际上没有任何意义,但说明了我的问题):

这给出了以下错误:

不能根据 OuterRef 注释子查询吗?


更新#1

找到了一个解决方法,可以让我现在继续前进,但这并不好。

更改OuterRef为使用自定义表达式

产量

0 投票
1 回答
5685 浏览

django - Django 子查询抛出“用作表达式的子查询返回的不止一行”

我最近升级到 django 1.11,我想使用新发布的Subquery exrpession功能。有以下两种型号

我想获得一个项目对象的查询集,并用每个项目的私人捐赠值的总和进行注释。我知道,还有其他方法可以做到这一点,我已经为我的应用程序提供了一个可行的解决方案,但是由于我正在学习此功能,所以我尝试了以下查询

但是上面的查询抛出异常

唯一成功运行的查询是下面的查询。

但是,如果我在“private_donations”查询中选择“项目”属性以外的任何内容,则会引发相同的错误

这是堆栈跟踪

任何指导将不胜感激。提前致谢。

0 投票
3 回答
7107 浏览

django - Django 条件子查询聚合

我的模型结构的一个简化示例是

现在我想显示一个显示公司的表格,其中一列将包含某种类型的部门数量,例如type=10。目前,这是通过Corporation模型上的帮助器来实现的,用于检索那些,例如

这里的问题是,由于 N+1 问题,这绝对会破坏性能。

我试图用select_relatedprefetch_relatedannotate和来解决这个问题subquery,但我无法得到我需要的结果。

理想情况下,Corporation查询集中的每个都应该用一个整数注释,该整数type_10_count反映了该类型部门的数量。

我确信我可以用原始 sql 做一些事情.extra(),但是文档宣布它将被弃用(我在 Django 1.11 上)

编辑:原始 sql 解决方案示例

0 投票
1 回答
1679 浏览

django - 子查询字段的总和 django

我有以下子查询:

cost然后我需要用每个子查询返回的值的总和来注释我的 QuerySet 。怎么做?在 Sum 中包装子查询仅返回每个子查询的第一个元素。

0 投票
2 回答
11310 浏览

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"))

但是,这不起作用,因为我需要计算特定的医生查询集。

我已经关注了这些链接

但是,我没有得到相同的结果:

如果您有任何问题可以更清楚地说明这一点,请告诉我。

0 投票
2 回答
869 浏览

python - Django过滤任何日期范围包含的日期

我正在尝试过滤具有DateField(日期)的模型以检索queryset其日期在列表中的任何一个中的实例,DateRanges但我正在努力找出我需要的确切逻辑。

例如,如果我有以下模型:

并且我创建了 3 个不同的日期范围,如何获取日期在这 3 个日期范围之一的所有游戏的列表?

我知道我可以遍历范围并为此使用链式Q()过滤器,但我需要将这一切都放在一个大的注释中,queryset这将不得不使用子查询,这样就不起作用了。

我目前的努力是这样的:-

但这不起作用,因为contained_by它与一个日期范围进行比较,而是一个queryset日期范围。

感觉就像我很接近,但我一定错过了一些愚蠢的事情。

有任何想法吗?

0 投票
2 回答
1177 浏览

python - 如何在 django 中获取内部连接的表别名

我使用 django 2.1、python 3.6 和 SQL Server 2012 作为后端。我有以下型号:

如何实现以下 SQL 查询:

到目前为止我所拥有的:

这会产生正确的过滤查询集。但是我怎样才能得到正确的字段呢?

我尝试使用annotate功能,但失败了。使用文档中描述的 django 会Subquery产生数据库错误,因为 SQL Server 不支持该SELECT部分中的子查询。

有什么建议吗?谢谢!

0 投票
2 回答
166 浏览

django - 如何在 Django 中执行双步子查询?

我有以下型号:

如您所见,Journal模型与模型相关,而Ledger模型的Foreignkey关系与模型进一步相关Group

我的场景有点复杂。

我想过滤Group对象及其余额(余额是它们的总数和总数之间的差异DebitCredit)。

我想过滤总组名称以及总和总的减法Debit.. CreditDebit并且CreditJournal模型的字段)。

谁能帮我弄清楚上述情况。

我之前尝试Subqueries过,但Django还没有做两步SubqueryDjango

任何解决方案都会有所帮助。

谢谢