问题标签 [django-annotate]

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 投票
0 回答
5026 浏览

python - 如何将模型方法的结果注释到 django 查询集

来自djangoannotate()文档:

使用提供的查询表达式列表注释 QuerySet 中的每个对象。表达式可能是一个简单的值,对模型(或任何相关模型)上字段的引用,或者...

是否可以为模型注释方法的结果?

我试过这样:

my_queryset.annotate(ann=my_method(request.user))

my_queryset.annotate(my_method(request.user))

但我得到一个my_method未定义的错误。该方法存在并且正常工作:object.my_method(request.user)

我认为有一个装饰器可以将方法视为一个字段,但我似乎找不到任何相关信息(它可能是基于 django 模板的方法调用,所以可能不相关)

这个问题提供了另一种解决方案。但我想知道是否可以annotate计算结果。

0 投票
0 回答
231 浏览

django - Django查询聚合与自身连接

使用以下模型,我想选择在验证状态下拥有最多帖子的 root 用户(在单个查询中或至少以优化的方式)。在我的情况下,root 用户不是直接作者,我想在 root 用户上聚合子用户作者。

这个问题可能与同一模型上缺少后向关系有关?

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 回答
765 浏览

django - Django在实例的其他字段上使用'when'注释many-2-many字段的单个实例

我有一个有点复杂的模型,所以我会尽力给出一个简化我当前状态和需求的例子。

我有一个查询集:

此查询集中的每个实例都有一个指向另一个模型的多对多字段,我们称之为“First_M2M”。First_M2M 对另一个模型有一个外键,对另一个模型(分别为 FkModel 和 Second_M2M)有一个多 2 多:

Second_M2M 有另一个多对多关系,Third_M2M:

现在这就是我想要做的:我想根据来自 second_m2m 实例之一的值订购我的 qs。但是,我需要选择它是哪个实例,这是通过查询 fk_model 中的一个字段(以确定 first_m2m 实例)和第三个_m2m 中的一个实例中的一个字段来完成的(这将确定 second_m2m)。

为了让它更有趣,订购的价值是 YAML。

这是我试图做的:

我相信我做错的是查询,这对 Django 来说不够连贯,无法确定它应该采用哪个实例。但我找不到我的问题。

任何帮助都感激不尽。

0 投票
2 回答
17955 浏览

python - Django queryset 将字段注释为列表/查询集

我正在尝试使用 django 注释来创建查询集字段,该字段是一些相关模型属性的值列表。

我正在考虑将所有这些 id 与一些分隔符连接起来,但我不知道合适的功能。另一种解决方案是使 list_field 成为queryset. 我知道这种语法是错误的。感谢您的任何帮助。

0 投票
0 回答
638 浏览

python - Django 嵌套聚合与 group_by

我有一个查询

这是我获取每个日期的指标总和并显示按周分组的平均结果的方式。不使用原始查询的 Django ORM 如何获得相同的结果。

到目前为止,我尝试了raw()这个查询。我也可以得到内部的select结果

0 投票
1 回答
868 浏览

python - Django中的复杂聚合

使用 Django rest framework 3.x 和Django 1.1.10. 我有一个代表用户的模型。当我通过访问/users/DRF 中的端点列出所有用户时,列表必须包含更多通过另一个模型(称为所有者)与用户相关的数据。每个项目都有一个所有者,所有者有用户。

我在 User 模型上创建了一个额外的属性,它只返回一个 JSON 数据数组。这是我无法改变的,因为这是前端的要求。我必须返回与每个用户相关的项目总数,并且要执行三种不同的计数来获取数据。

我需要在同一模型上获得多个 count() 的项目,但条件不同。

分别做这些很容易,两个是微不足道的,最后一个更复杂:

问题是因为这是为每个用户运行的,而且其中有很多用户。最后,这会生成 300 多个数据库查询,我希望将这些查询降到最低。

到目前为止,我想出了这个:

这将聚合前两个计数,返回它们,并且只会SELECT在数据库上执行一个。有没有办法将最后一次count()通话合并到同一个电话中aggregate()

我尝试了很多东西,但似乎不可能。我应该只写一个自定义SELECT并使用Item.objects.raw()吗?

我还注意到在我的开发机器和 SQLite 上执行aggregate()最后一个count()比在使用 Postgresql 的登台服务器上更快,这有点奇怪,但这不是我现在主要关心的问题。

0 投票
1 回答
22 浏览

django - 与 django 不同的无效

我尝试在我的 Django 项目中获取汽车列表,但我遇到了 ORM 问题

使用 Car.objects.all() 我有一个列表:

我想要的是:

然后,所有汽车的名称都是不同的,无论车主是谁

我尝试过类似的东西

但我仍然拥有所有汽车。有人可以帮我解决这个问题吗?文档建议注释和聚合,但仍然很难理解。

0 投票
1 回答
348 浏览

python - Django注释不带回不同

我正在尝试使用 annotate 查询 Django 中的查询集,以获取每个不同的“field2”的计算。查询如下所示:

虽然我期望它返回如下所示的内容:

[{'field2_value1': '1'}, {'field2_value2': '2'}]

我收到相同 field2 值的多个条目。所以它看起来更像这样:

[{'field2_value1': '1'}, {'field2_value1': '2'}, {'field2_value1': '5'},{'field2_value2': '2'}, {'field2_value2': '1'} ]

正如我在其他问题中看到的那样,我在查询中有 order_by() 有时很重要,但这对我没有帮助。我如何查询它以只为每个唯一的 field2 值返回一个条目?

0 投票
1 回答
250 浏览

python - Django Naturaltime 在 .annotate 中不起作用

在这里,我只想在模型上注释一个字段,该字段提供人类可读的格式,说明自创建以来经过了多少时间

我的型号说明:

我所做的是在这里

在这个打印电话中,我得到了DateTimeField我在模型中使用的那个。但是如果我想访问该属性。

有用。

有什么帮助吗?TIA。