首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django + Python 3中注释计数的格式化日期

Django + Python 3中注释计数的格式化日期
EN

Stack Overflow用户
提问于 2018-10-07 09:31:48
回答 1查看 3.8K关注 0票数 6

我目前正在尝试注释和计数一些日期,根据它们出现的次数。

代码语言:javascript
复制
visits = Subs.objects.filter(camp=campdata, timestamp__lte=datetime.datetime.today(), timestamp__gt=datetime.datetime.today()-datetime.timedelta(days=30)).\
values('timestamp').annotate(count=Count('timestamp'))

如果我用像这样的for循环打印这个

代码语言:javascript
复制
for a in visits:
  print(a)

我会回到Json的下面。

代码语言:javascript
复制
{'timestamp': datetime.datetime(2018, 10, 5, 15, 16, 25, 130966, tzinfo=<UTC>), 'count': 1}
{'timestamp': datetime.datetime(2018, 10, 5, 15, 16, 45, 639464, tzinfo=<UTC>), 'count': 1}
{'timestamp': datetime.datetime(2018, 10, 6, 8, 43, 24, 721050, tzinfo=<UTC>), 'count': 1}
{'timestamp': datetime.datetime(2018, 10, 7, 4, 54, 59, tzinfo=<UTC>), 'count': 1}

这是正确的方向,然而,它是第二个..。我只需要几天,这样2018年,10,5的事件就会被计算在内,比如2。

有人能把我引向正确的方向吗?

此外,将日期转换为更友好的json / api的最"django“方式是什么?

我的理想归宿应该是

代码语言:javascript
复制
{'timestamp': 2018-10-5, 'count': 2}

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-07 11:41:06

您可以使用TruncDate注释来实现这一点:

代码语言:javascript
复制
visits = Subs.objects.annotate(date=TruncDate('timestamp')).filter(
    camp=campdata, 
    date__lte=datetime.datetime.today(), 
    date__gt=datetime.datetime.today() - datetime.timedelta(days=30)
).values('date').annotate(count=Count('date'))

关于序列化JSON日期的问题,Django提供了DjangoJSONEncoder来帮助实现以下操作:

代码语言:javascript
复制
import json
from django.core.serializers.json import DjangoJSONEncoder

json.dumps(list(visits), cls=DjangoJSONEncoder)
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52687170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档