每天持续7天的Django ORM查询

时间:2019-12-02 10:38:33

标签: django django-models django-rest-framework django-orm

这是我的模特

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')
        )

有人可以帮助我处理此案吗?

1 个答案:

答案 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