问题标签 [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.
django - 注释 Django ModelAdmin 列表而不注释计数查询
所以很长一段时间以来,我一直在 ModelAdmins 中进行注释,以将复杂的数字和相关字段添加到列表管理员显示中。这是一个简单的计数示例。
在实践中,我在一些 ModelAdmins 上做了四五个。查询比股票查询慢,但比做 1+100 查询要快,因为相关数据是拉进来的。
但是,Django 对列表视图进行计数查询。在表格下方,您会看到一条xxx modelnames
消息。这是从相同的带注释查询生成的。使用 Django 调试工具栏验证。我发现在某些情况下,减少查询数量所节省的任何费用都会丢失到更复杂的计数查询中。
我知道覆盖get_queryset
允许您过滤数据,但这不是我使用它的方式。有没有更好的东西我可以覆盖它允许计数通过未注释,但让我为列表显示添加注释?
python - django注释一个函数,该函数返回所有具有特征的对象中字段的最大值
假设我有这个模型:
我想让所有mark
班里成绩最高的学生。我可以得到mark
所有班级中最高的学生,就像这篇文章中提到的那样。但我希望所有mark
班上成绩最高的学生,像这样:
我可以用一个for
循环来做到这一点,但是对于一个大型数据库for
循环来说是相当慢的。不知道这样的查询能不能写成一行?
python - django annotate - 条件计数
我有一个名为“StoreItem”的模型和一个名为“QuoteItem”的模型。一个 QuoteItem 指向一个 StoreItem。
我正在尝试注释有多少报价项目指向商店项目的计数器,但条件适用于报价项目。
我试过这样的事情:
'items' 是 StoreItems 的查询集。'this_week' 是代表本周的日期列表(这是我尝试应用的过滤器)。在我使日期工作正常后,我想为这个条件计数添加更多过滤器,但让我们从它开始。
无论如何,我得到的更像是一个布尔值 - 如果存在符合条件的报价项目,无论我有多少,计数器将为 1。否则,将为 0。
它看起来是Count(Case())
唯一检查是否存在任何项目,如果存在则返回 1,而我希望它遍历指向商店项目的所有报价项目并计算它们,如果它们符合条件(单独)。
我该如何实现?
python - 使用Django ORM查询如何注释是否存在多级外键层次结构
我的 Django 模型看起来像
但是我怎样才能得到每个父母的孩子的数量和孙子的数量
django - 如何注释按日期时间过滤的计数?
我有类别和项目。这些项目有一个结束字段(日期时间)。现在我需要列出所有类别并显示相关项目数和未来项目的项目数。举个例子:
- Cat Foo,2 项,未来 1 项。
- 猫 n,未来 n 件物品。
名单会很大。因此,数据库必须承担繁重的工作并同时注释item_count
和future_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 查询来完成吗?
django - 如何以天为单位注释日期时间的差异
我有一个具有Booking
日期时间字段的模型。我想知道预订涵盖多少天。我可以在 Python 中做到这一点,但我需要这个值来做进一步的注释。start
end
这是我尝试过的:
这里有几个问题:
- 我想要一个整数(或我可以在计算中使用的其他数字类型)作为输出,而不是 timedelta。设置 output_field 在这里没有任何意义。
- 我的总和是基于日期时间的。像这样的减法,不删除时间可能会导致整个天数被关闭。
在 Python 中,我会做(end.date() - start.date()).days + 1
. 我怎样才能在数据库中做到这一点,最好是通过 ORM(例如数据库函数),但RawSQL
足以让它走出门外?
django - 在管理器中注释相同项目的数量
假设我有以下简化模型:
如果由于某种原因先前生成的发票是错误的,则Person 可以拥有Invoice
相同的值。number
最新的(最高created_on
的)是最重要的。
要获得按姓氏.filter(id__in)
列出的结果,需要使用管理器中的技巧;person
这不能被删除。
现在我想注释number
. 即使有多个,我的尝试annotate(invoice_count=models.Count('number'))
总是会返回。1
我究竟做错了什么?关于如何正确实现这一点的任何指示,而不会过多地破解并且不会为每张发票打到数据库?
django - Django 在相关项目之间共享注释
考虑一个房间预订系统。您可能有建筑物、楼层、房间模型以及预订。我们根据房间的建筑和楼层给房间命名:
当你在做数百个(例如管理列表、大报告等)时,这效率非常低,所以我开始编写这样的管理器:
那行得通。它做了我想做的一切。它的速度很快,而且在它执行可怕的多查询字符串构建器之前,我已经对其进行了重新设计__str__
。if hasattr(self, 'roomname'): return self.roomname
但现在最重要的是,我有预订。每个 Booking 实例都链接到一个房间。很多情况下要列出 Bookings,我其实也列出了房间名称。
我所做的是写了一个BookingManager:
但到底是什么?我在重复自己。Django 是关于 DRY 的,在这里我复制并粘贴了一个巨大的混乱注释。那真令人恶心。
我的问题是......还有其他方法吗?
django - Django的带除法的注释计数返回整数而不是浮点数
我有很多对象,其中 3 个具有 name='AAA'
我将它们按“名称”分组并在组中注释 num:
我得到:
一切都很好,但是当我尝试添加一些公式来注释 Count() 时:
我得到:
但预期:
编辑:
Python 划分通过 Django 的 ORM 与 SQL 划分不同,因此 python 3 中的 2/1 返回 2.0 - OK,但在 SQL 中没有
django - 在 Django 中注释相关和多重过滤的对象
我有一个配置文件查询集:
模型:
看法:
Profile.objects.select_related('user')
每个用户/个人资料每天可以注册多个活动:
楷模:
给定一个日期,我如何注释(?我认为这就是我想要的?)每个块一个注册对象(根据用户/配置文件和 Event__Date 过滤)
最后,我试图在我的模板中输出的是这样的:
编辑
尝试 1. 这是我第一次尝试完成此操作。我怀疑这是非常低效的,并且在生产中会非常缓慢,但至少它有效。如果有人可以提供更有效和优雅的解决方案,将不胜感激!(请注意,这还包括对 homeroom_teacher 的用户配置文件模型的过滤器,该过滤器未包含在原始问题中,但我已离开此处,因为这是有效的代码)
注册模型经理
类RegistrationManager(models.Manager):
模板 请注意,block.constant_string() --> "ABLOCK"、"BBLOCK" 等,这是在 block.constant_string() 方法中硬编码的,我也不知道如何解决这个问题。