首页 > 解决方案 > 在python django中获取前几个月的数据

问题描述

嗨,我正在使用 django,我的模型看起来像这样

class SignupMonthlyPoint(models.Model):
    user = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name='SignupMonthlyPoints')
    timestamp = models.DateTimeField(auto_now_add=True)
    value = models.FloatField()

我得到了最近 30 天这样的数据

def get_signupfromlinkmonthlypoints():
    total_for_last_month =request.user.profile.SignupMonthlyPoint.filter(
    timestamp__gt=datetime.datetime.now() - relativedelta(months=1)
    ).aggregate(
    total=Sum('value')
    )['total']
    print(total_for_last_month)

但是当我分析它最近 30 天的数据而不是上个月的数据时。我想让这个像 整个 8 月的数据一样,因为它是 9 月的最后一个月,然后是整个 7 月的数据,依此类推。

标签: pythondjangopython-3.xdjango-modelspython-dateutil

解决方案


我将从计算月份的开始日期和结束日期开始:

now = timezone.now()
one_month_ago = datetime.datetime(now.year, now.month - 1, 1)
month_end = datetime.datetime(now.year, now.month, 1) - datetime.timedelta(seconds=1)

然后得到对应SignupMonthlyPoint的s:

SignupMonthlyPoint.objects.filter(user=request.user,
                                  timestamp__gt=one_month_ago,
                                  timestamp__lt=month_end)

您可能必须timezone.make_aware()在日期上使用来添加时区并使它们可以被 Django 识别


推荐阅读