gpt4 book ai didi

python - Django 每月注释价格

转载 作者:行者123 更新时间:2023-11-29 11:01:16 26 4
gpt4 key购买 nike

我想将此引用给我的另一个 Question在这里,所以我试图显示每月的价格并制作一个包含 12 个月的表格,一行包含每月的项目总收入,所以我已经使用

成功计算了我的价格

context["price_aux"] = Project.objects.annotate().aggregate(Sum("price_aux"))

我可以在表格中显示我的数据,然后为此生成一行总计,但正如您从我之前的问题中看到的那样,我想每月对此进行注释并制作一个表格,然后显示该月的总计,但我很难理解如何从数据库中提取它,那么在 django==1.8+ 中执行此操作的正确方法是什么? ,我看到在最近的版本中他们添加了 Extract ,但我不能在1.8中使用它,第二件事是django extra他们在这里说Use this method as a last resort ,那么你能解释一下如何才能完成这项工作吗?

最佳答案

我的建议是向模型添加一个字段,因为不可能在 .values_list 中使用 __month。 Values_list 可用于在注释之前对查询进行分组。

字段可能是这样的。

year_month = models.CharField(index=True)

您可以覆盖模型上的保存方法并执行类似的操作

def save(self, *args, **kwargs)
# Not sure if auto_add_now already set the value, could use timezone.now()
if not self.id: # thus not saved yet
self.year_month = self.created_at.strftime("%Y%m")
super(Model, self).save(*args, **kwargs)

现在可以注释您的价格。

Project.objects.values_list('year_month').annotate(price_sum=Sum("price_aux"))

如果您需要更多信息,我相信您可以扩展values_list。

Project.objects.values_list('year_month').annotate(price_sum=Sum("price_aux")) \
.values_list('name', 'year_month', 'price_sum')

不添加字段当然是可能的。假设您想要过去的一年。

import datetime
from django.utils import timezone

def my_list_view(request):
end = timezone.now()
# note, could do some weird stuff in years with 366 days
begin = (end - datetime.timedelta(days=365)).replace(day=1)

container = {}
while begin < end:
container[begin.strftime("%Y%m")] = 0
begin = (begin + datetime.timedelta(weeks=5).replace(day=1)

for project in Project.objects.iterator():
container[project.created_at.strftime("%Y%m")] += price

# Now you can render your template

关于python - Django 每月注释价格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42199230/

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