我试图使用以下视图来获取一个月的每一天的对象数:
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寻求帮助
答案 0 :(得分:0)
您可以过滤年份和月份,然后每天获取Count
,例如:
from django.db.models import Count
from django.db.models.functions import ExtractDay
qs = Daily_movements.objects.filter(
mov_date__year=year,
mov_date__month=month
).annotate(
day=ExtractDay('mov_date'),
).values(
'day'
).annotate(
n=Count('pk')
).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)]