gpt4 book ai didi

python - Django Python - 本月和过去 6 个月的查询计数

转载 作者:行者123 更新时间:2023-12-02 20:02:20 24 4
gpt4 key购买 nike

我正在使用 Django 1.10.5 和 python 3.6

我有以下模型类:

class PublishedRecordedActivity(models.Model):
published_details = models.ForeignKey(PublishedDetails, null=True, blank=True, on_delete=models.CASCADE)
timestamp_added = models.DateTimeField(auto_now_add=True)
activity_type = models.IntegerField(null=False, blank=False, default=1)

我想计算当月以及过去 6 个月中每个月的事件类型(1、2、3 或 4)的记录数。

例如,整个当月(2019 年 4 月)的计数。

一个月前的计数(2019 年 3 月的整个月)。

两个月前(2019 年 2 月整个月)等的计数

我可以编写计数查询,但我不确定如何为每个月添加过滤器。

这是我的查询:

test_count = PublishedRecordedActivity.objects.filter(activity_type=1).count

最佳答案

首先,找出您要过滤的月份。为此,使用 relativedelta来自 dateutil 的函数包裹

In [33]: from datetime import datetime                                                                                                                                                                             

In [34]: from dateutil.relativedelta import relativedelta

In [35]: months_before = 6

In [36]: now = datetime.utcnow()

In [37]: now
Out[37]: datetime.datetime(2019, 4, 8, 5, 6, 42, 300424)

In [38]: from_datetime = now - relativedelta(months=months_before)

In [39]: from_datetime
Out[39]: datetime.datetime(2018, 10, 8, 5, 6, 42, 300424)

In [40]: modified_from_datetime = from_datetime.replace(day=1, hour=0, minute=0, second=0, microsecond=0)

In [41]: modified_from_datetime
Out[41]: datetime.datetime(2018, 10, 1, 0, 0)

然后在过滤器中使用 modified_from_datetime 变量 gte ,

PublishedRecordedActivity.objects.filter(activity_type=1, <b>timestamp_added__gte=modified_from_datetime</b>)

完整片段

from datetime import datetime
from dateutil.relativedelta import relativedelta

months_before = 6
now = datetime.utcnow()
from_datetime = now - relativedelta(months=months_before)
modified_from_datetime = from_datetime.replace(day=1, hour=0, minute=0, second=0, microsecond=0)

PublishedRecordedActivity.objects.filter(activity_type=1, timestamp_added__gte=modified_from_datetime)

更新-1

将分组依据功能用作,

from django.db.models.functions import TruncMonth
from django.db.models.aggregates import Count

aggregated = PublishedRecordedActivity.objects.filter(
activity_type=1).annotate(month=TruncMonth('timestamp_added')).values('month').annotate(sum_by_month=Count('month'))

关于python - Django Python - 本月和过去 6 个月的查询计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55566143/

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