gpt4 book ai didi

python - 日期范围内的 Django 聚合

转载 作者:太空宇宙 更新时间:2023-11-04 06:39:30 24 4
gpt4 key购买 nike

我在这里潜伏和学习了一段时间。现在我有一个问题,不知何故我看不到一个简单的解决方案。为了学习 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com