问题标签 [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 投票
1 回答
668 浏览

django - Django在返回时添加反向外键的值作为字段

我有两个模型。一种是任务模型,另一种是奖励模型。

现在我想返回一个任务查询集以及其中的奖励字段。我试过这个查询。search_res = Task.objects.annotate(reward='reward')。

我收到此错误:注释“奖励”与模型上的字段冲突。 请告诉如何解决这个问题。我想要在每个任务对象中获得现场奖励。

0 投票
1 回答
1011 浏览

python - 如果我在长度为 1 的 QuerySet 上使用 first() 与 last() 为什么会得到不同的结果

在为一个方法编写测试用例时,我发现如果我使用 my_queryset.first().my_annotated_value 与使用 my_queryset.last().my_annotated_value 时会得到不同的结果,尽管 my_queryset.count() 返回 1。

这是相关的代码片段:

在我运行的外壳中:

我有不同的 django 应用程序用于shops,matches和.employeescustomers

我搜索了几个小时并检查了 django 文档中 first() 和 last() 的实现。我找不到任何解释这种行为的东西。

为什么价值观不同,到底发生了什么?我做错了什么还是这是一个错误?

0 投票
1 回答
790 浏览

python - Django 查询求和 ArrayFields 的长度

我有这个模型:

我正在尝试弄清楚如何在 Django 中执行与此 SQL 查询等效的操作:

  • 我试过了extra(select={codes_len':'cardinality(codes)'}),但你不能annotateaggregate超过一个extra领域。
  • 我试过了annotate(Sum("cardinality('codes')")),但 cardinality('codes')不是模型上的一个字段。
  • 我研究了编写一个自定义聚合字段,它结合了Sumcardinality,但看起来……很脆弱。
  • 我在文档中发现__len确实可以在 上正常工作 ArrayField,但在 annotate(Sum('codes__len')).
  • 我排除了原始 SQL,因为有很多WHERE语句(这里省略)使得这个查询难以手动重建。

在这一点上,我想我别无选择,只能在模型中添加一个字段长度的codes字段并弄乱以save()使其保持同步。

真的没有别的办法了吗?我错过了什么吗?

0 投票
0 回答
278 浏览

django - Django 在 Annotate Count 中递增 Then 值

假设我有查询集 A。

现在,每次A.name == 'Jack'c将设置为 I。每次发生这种情况时,如何增加 I?所以对于第一种情况,I = 1对于第二种情况,I=2等等。

0 投票
2 回答
895 浏览

django - GeoDjango:距离对象不可序列化

我只是在学习geo-django。我可以从一个点找出所有地方的距离。但是当我.values对带注释的字段使用方法时distance,我得到了

TypeError: Object of type 'Distance' is not JSON serializable

这是我的代码片段

现在我的代码片段是这样的

这里的值p是这样的

所以我在这里需要的'distance': 7596021.71574835只是'distance': Distance(m=7596021.71574835)

对此有什么帮助吗?提前致谢。

0 投票
1 回答
2578 浏览

django - django 用模型字段名称注释值

我有以下型号

我正在尝试注释状态字段,以便结果将保存可读值而不是状态代码。这就是我想要做的:

结果是一个例外:

为什么要限制注释而不是额外验证相同的行为?有什么方法可以覆盖对注释的限制并节省我手动构建查询的时间吗?

0 投票
1 回答
11195 浏览

django - django - annotate() - 列的 Sum() 与另一列上的过滤器

我有以下两个模型。

我需要列出所有带有stock_in_sum=Sum(of all stock ins),stock_out_sum=Sum(of all stock outs)blance_stock=opening_stock+stock_in_sum - stock_out_sum

这是我迄今为止所取得的成就。

我需要得到

  1. stock_in_sum作为sum(quantity) where ttype='I'
  2. stock_out_sum作为sum(quantity) where ttype='O'
  3. blance_stock作为product.opening_stock + stock_in_sum - stock_out_sum

以及每个 Product 对象。

我如何实现这一目标?

谢谢。

0 投票
1 回答
1515 浏览

python - 每天时间范围内的 Django 注释

我正在使用以下查询来获取每天的总和:

正如预期的那样,每天午夜 00:00 都会发生变化!我想更改此行为,以便在每天06:00 到 06:00 期间生成总和。我认为使用会做,但我在 django 查询方面没有经验。datetime__range = ..

谢谢...

0 投票
3 回答
5447 浏览

django - django 使用基于查询的聚合值注释模型

假设我有以下模型结构:

我正在尝试从 ParentViewSet恢复以下内容:

  1. 孩子的数量。
  2. 当 'state' 为 True 时,'num' 字段的总和。

我可以执行以下操作:

这给了我 (1) 但不是 (2) 它给了我所有孙辈的总和。如何在确保所有Parent对象仍在 QuerySet 中的同时适当地过滤孙子?

0 投票
3 回答
11302 浏览

python - Django 自定义复杂 Func(sql 函数)

在通过 exact 为 Django ORM order找到解决方案的过程中,我创建了一个自定义 django Func:

其工作原理如下:

但正如@hynekcer 评论的那样:

“它很容易崩溃,因为应用程序的') in '') from myapp_suburb; drop ... 名称是“myapp and autocommit is enabled”。

主要问题是额外数据 ( substring) 在没有 sqlescape 的情况下进入模板,这使应用程序容易受到 SQL 注入攻击。

我找不到 Django 的保护方法。


我创建了一个repo (djposfunc),您可以在其中测试任何解决方案。