问题标签 [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 回答
524 浏览

django - 注释 Django ModelAdmin 列表而不注释计数查询

所以很长一段时间以来,我一直在 ModelAdmins 中进行注释,以将复杂的数字和相关字段添加到列表管理员显示中。这是一个简单的计数示例。

在实践中,我在一些 ModelAdmins 上做了四五个。查询比股票查询慢,但比做 1+100 查询要快,因为相关数据是拉进来的。

但是,Django 对列表视图进行计数查询。在表格下方,您会看到一条xxx modelnames消息。这是从相同的带注释查询生成的。使用 Django 调试工具栏验证。我发现在某些情况下,减少查询数量所节省的任何费用都会丢失到更复杂的计数查询中。

我知道覆盖get_queryset允许您过滤数据,但这不是我使用它的方式。有没有更好的东西我可以覆盖它允许计数通过未注释,但让我为列表显示添加注释?

0 投票
1 回答
3636 浏览

python - django注释一个函数,该函数返回所有具有特征的对象中字段的最大值

假设我有这个模型:

我想让所有mark班里成绩最高的学生。我可以得到mark所有班级中最高的学生,就像这篇文章中提到的那样。但我希望所有mark 班上成绩最高的学生,像这样:

我可以用一个for循环来做到这一点,但是对于一个大型数据库for循环来说是相当慢的。不知道这样的查询能不能写成一行?

0 投票
2 回答
5109 浏览

python - django annotate - 条件计数

我有一个名为“StoreItem”的模型和一个名为“QuoteItem”的模型。一个 QuoteItem 指向一个 StoreItem。

我正在尝试注释有多少报价项目指向商店项目的计数器,但条件适用于报价项目。

我试过这样的事情:

'items' 是 StoreItems 的查询集。'this_week' 是代表本周的日期列表(这是我尝试应用的过滤器)。在我使日期工作正常后,我想为这个条件计数添加更多过滤器,但让我们从它开始。

无论如何,我得到的更像是一个布尔值 - 如果存在符合条件的报价项目,无论我有多少,计数器将为 1。否则,将为 0。

它看起来是Count(Case())唯一检查是否存在任何项目,如果存在则返回 1,而我希望它遍历指向商店项目的所有报价项目并计算它们,如果它们符合条件(单独)。

我该如何实现?

0 投票
1 回答
914 浏览

python - 使用Django ORM查询如何注释是否存在多级外键层次结构

我的 Django 模型看起来像

但是我怎样才能得到每个父母的孩子的数量和孙子的数量

0 投票
1 回答
300 浏览

django - 如何注释按日期时间过滤的计数?

我有类别和项目。这些项目有一个结束字段(日期时间)。现在我需要列出所有类别并显示相关项目数和未来项目的项目数。举个例子:

  • Cat Foo,2 项,未来 1 项。
  • 猫 n,未来 n 件物品。

名单会很大。因此,数据库必须承担繁重的工作并同时注释item_countfuture_item_count

楷模:

创建一个类别和两个相关项目。一个过去,一个未来:

当我注释 item_count 时,它按预期工作:

我不能注释由 Item.end (日期时间)过滤。这完全可以通过 Django 查询实现吗?

我希望得到:[{'item_count': 2, 'future_item_count': 1, 'title': u'Cat 1'}]

我也尝试过 RawSQL,但缺乏 SQL 技能:

但是当我改变时WHERE project_item.end < NOW()"WHERE project_item.end > NOW()"我得到了相同的结果:

如何格式化原始 SQL?或者这可以用 Django 查询来完成吗?

0 投票
3 回答
6196 浏览

django - 如何以天为单位注释日期时间的差异

我有一个具有Booking日期时间字段的模型。我想知道预订涵盖多少天。我可以在 Python 中做到这一点,但我需要这个值来做进一步的注释。startend

这是我尝试过的:

这里有几个问题:

  • 我想要一个整数(或我可以在计算中使用的其他数字类型)作为输出,而不是 timedelta。设置 output_field 在这里没有任何意义。
  • 我的总和是基于日期时间的。像这样的减法,不删除时间可能会导致整个天数被关闭。

在 Python 中,我会做(end.date() - start.date()).days + 1. 我怎样才能在数据库中做到这一点,最好是通过 ORM(例如数据库函数),但RawSQL足以让它走出门外?

0 投票
1 回答
218 浏览

django - 在管理器中注释相同项目的数量

假设我有以下简化模型:

如果由于某种原因先前生成的发票是错误的,则Person 可以拥有Invoice相同的值。number最新的(最高created_on的)是最重要的。

要获得按姓氏.filter(id__in)列出的结果,需要使用管理器中的技巧;person这不能被删除。

现在我想注释number. 即使有多个,我的尝试annotate(invoice_count=models.Count('number'))总是会返回。1

我究竟做错了什么?关于如何正确实现这一点的任何指示,而不会过多地破解并且不会为每张发票打到数据库?

0 投票
2 回答
43 浏览

django - Django 在相关项目之间共享注释

考虑一个房间预订系统。您可能有建筑物、楼层、房间模型以及预订。我们根据房间的建筑和楼层给房间命名:

当你在做数百个(例如管理列表、大报告等)时,这效率非常低,所以我开始编写这样的管理器:

那行得通。它做了我想做的一切。它的速度很快,而且在它执行可怕的多查询字符串构建器之前,我已经对其进行了重新设计__str__if hasattr(self, 'roomname'): return self.roomname

但现在最重要的是,我有预订。每个 Booking 实例都链接到一个房间。很多情况下要列出 Bookings,我其实也列出了房间名称。

我所做的是写了一个BookingManager:

但到底是什么?我在重复自己。Django 是关于 DRY 的,在这里我复制并粘贴了一个巨大的混乱注释。那真令人恶心。

我的问题是......还有其他方法吗?

0 投票
1 回答
7092 浏览

django - Django的带除法的注释计数返回整数而不是浮点数

我有很多对象,其中 3 个具有 name='AAA'

我将它们按“名称”分组并在组中注释 num:

我得到:

一切都很好,但是当我尝试添加一些公式来注释 Count() 时:

我得到:

但预期:

编辑:

Python 划分通过 Django 的 ORM 与 SQL 划分不同,因此 python 3 中的 2/1 返回 2.0 - OK,但在 SQL 中没有

0 投票
2 回答
309 浏览

django - 在 Django 中注释相关和多重过滤的对象

我有一个配置文件查询集:

模型:

看法:

Profile.objects.select_related('user')

每个用户/个人资料每天可以注册多个活动:

楷模:

给定一个日期,我如何注释(?我认为这就是我想要的?)每个块一个注册对象(根据用户/配置文件和 Event__Date 过滤)

最后,我试图在我的模板中输出的是这样的:

编辑

尝试 1. 这是我第一次尝试完成此操作。我怀疑这是非常低效的,并且在生产中会非常缓慢,但至少它有效。如果有人可以提供更有效和优雅的解决方案,将不胜感激!(请注意,这还包括对 homeroom_teacher 的用户配置文件模型的过滤器,该过滤器未包含在原始问题中,但我已离开此处,因为这是有效的代码)

注册模型经理

类RegistrationManager(models.Manager):

模板 请注意,block.constant_string() --> "ABLOCK"、"BBLOCK" 等,这是在 block.constant_string() 方法中硬编码的,我也不知道如何解决这个问题。