python - 日期范围内的 Django 聚合

标签 python django date django-aggregation

我在这里潜伏和学习了一段时间。现在我有一个问题,不知何故我看不到一个简单的解决方案。为了学习 Django,我正在构建一个基本上跟踪预订项目的应用程序。 我想做的是显示某个项目在选定年份每月有多少天被预订。

我有以下模型:

Asset(Model)

BookedAsset(Model):
 asset = models.ForeignKey(Asset)
 startdate = models.DateField()
 enddate = models.DateField()

所以有以下条目:

asset 1, 2010-02-11, 2010-02-13
asset 2, 2010-03-12, 2010-03-14
asset 1, 2010-04-30, 2010-05-01

我想得到以下返回:

asset 1    asset 2
-------    -------
Jan = 0    Jan = 0
Feb = 2    Feb = 0
Mar = 0    Mar = 2
Apr = 1    Apr = 0
May = 1    May = 0
Jun = 0    Jun = 0
Jul = 0    Jul = 0
Aug = 0    Aug = 0
Sep = 0    Sep = 0
Oct = 0    Oct = 0
Nov = 0    Nov = 0
Dec = 0    Dec = 0

我知道我需要先获取日期范围内的天数(并跟踪它们是否超出当前月份并进入下个月),然后对天数进行汇总。我只是想知道如何在 Django 中优雅地做到这一点。

非常感谢任何帮助(或正确方向的提示)。

最佳答案

我想不出用你的模型结构来做这件事的方法。

这是一个相当复杂的要求,无论您如何解决它,都可能需要相当多的自定义 SQL。我认为作为一个开始,您可能需要考虑更改您的结构,以便您拥有一个 BookedAssetDay 表,它分别代表预订的每一天。

class BookedAsset(models.Model):
    asset = models.ForeignKey(Asset)
    day = models.DateField()

然后查询看起来像这样:

BookedAsset.objects.extra(
    select={'month': 'MONTH(day)'}
).values('asset', 'month').annotate(Count('bookedasset__month'))

关于python - 日期范围内的 Django 聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2891980/

相关文章:

python - 如何设置 Autobahn Pub/Sub 服务器和 Autobahn Web 服务器监听同一端口

python - pytest动态参数化测试

django - Nginx - 如何使用上游模型提供静态文件

python - 使循环依赖模型属性在 graphene-django 中可查询

Javascript new date(str).getTime() 不适用于 IST

c++ - 当前日期和时间作为字符串

python - [qpid]qpid-python 客户端不适用于 qpid-0.22

python - 无法弄清楚这段代码的作用

python - 如何使用 Django 博客制作复杂的帖子

java - Java中的时区解析问题