python - Django 获取一个月中每一天的对象数

我正在尝试使用以下 View 获取一个月中每一天的对象数量:

startIng = datetime.datetime(2019,1,1)
endIng = datetime.datetime(2019,2,1)
aDayDelta = timedelta(days=1)
totalDays = (endIng - startIng).days
days = [startIng + k*aDayDelta for k in range(totalDays)] 
for mydays in days:
    datem = Daily_movements.objects.filter(mov_date__startswith=(mydays))
...

但我一无所获

尝试:

datem = Daily_movements.objects.filter(mov_date__startswith=datetime.datetime(2019, 2, 9, 0, 0))

我得到了这个给定日期的完美结果

TIA 寻求帮助

最佳答案

您可以过滤年份和月份,然后每天获取一个Count,例如:

from django.db.models import <b>Count</b>
from django.db.models.functions import <b>ExtractDay</b>

qs = Daily_movements.objects.filter(
    mov_date__year=year,
    mov_date__month=month
).annotate(
    <b>day=ExtractDay('mov_date')</b>,
).values(
    <b>'day'</b>
).annotate(
    <b>n=Count('pk')</b>
).order_by('day')

这将产生一个 QuerySet,它用两个项目包装字典:'day',表示日期,以及 n,它表示值。例如:

<QuerySet [
   { 'day': 1, 'n': 12 },
   { 'day': 3, 'n': 13 },
   { 'day': 4, 'n': 2 },
   { 'day': 6, 'n': 14 },
   { 'day': 10, 'n': 25 }
]>

然后我们可以将其转换为 Counter,例如:对于未知键默认为零的字典,例如:

from collections import Counter

data = Counter({d['day']: d['n'] for d in qs})

我们可以将其转换为列表:

from calendar import monthrange

__, ds = monthrange(year, month)
result = [data[i] for i in range(1, ds+1)]

https://stackoverflow.com/questions/54620381/

相关文章:

python - MPI4Py comm.Barrier() 没有阻塞 MSMPI?

python-3.x - 为什么在 python 中允许 for else

kubernetes - 定时任务 : unknown field "configMapRef"

c# - 调用多个相互依赖的异步方法

oracle - 使用sqlplus命令行隐藏明文密码

reactjs - 将映射数据传递给 Material-UI 模态

reactjs - 为什么我的 GlobalStyles 在使用样式化组件部署后不起作用?

haskell - OverloadedStrings 语言扩展如何工作?

google-apps-script - 调试由发布请求触发的 Google Apps 脚本?

php - 如何仅在 Laravel 中出现日期时才验证日期