这是我的模特
class Sales(models.Model):
title = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
我正在尝试获取过去7天的数据,就像我想查看上星期五,星期六,星期一等日期发生了多少销售。
仅适用于过去7天,但应每天显示一次,
喜欢:
friday: 40
mondey:80
widnesday: 88 etc date
我不知道该怎么做...
我在下面尝试过这样:
some_day_last_week = timezone.now().date() - timedelta(days=7)
sales = Sales.objects.filter(
created_at__gte=some_day_last_week,
).values(
'created_at__date'
).annotate(
created_count=Count('created_at__date')
)
有人可以帮助我处理此案吗?
答案 0 :(得分:0)
您需要在自己的情况下使用TruncDay:
from django.db.models.functions import TruncDay
sales = Sales.objects.filter(
created_at__gte=some_day_last_week,
).annotate(
day=TruncDay('created_at')
created_count=Count('created_at__date')
).values(
'day',
'created_count',
)
结果,您将得到:
[
{'day': datetime.date(2019, 12, 1), 'created_count': 4.0},
{'day': datetime.date(2019, 12, 2), 'created_count': 10.0},
{'day': datetime.date(2019, 12, 3), 'created_count': 5.0},
{'day': datetime.date(2019, 12, 4), 'created_count': 1.0},
{'day': datetime.date(2019, 12, 5), 'created_count': 8.0},
{'day': datetime.date(2019, 12, 6), 'created_count': 4.0},
]
为了获取日期名称,您可以使用date.strftime("%A")
转换datetime对象:
for i in result:
print(i['day'].strftime("%A"))
# result
Sunday
Monday
...
Friday