Django查询格式化日期时间输出

Posted

技术标签:

【中文标题】Django查询格式化日期时间输出【英文标题】:Django query formatting datetime output 【发布时间】:2014-08-05 02:33:53 【问题描述】:

我的 Django 安装使用 PostgreSQL 后端。

我在 Django 视图中执行以下操作:

completedItems = Completed.objects.filter(user_id=1)
return HttpResponse(completedItems.values('item_id','item_name','event_datetime','item_id__item_name'))

对于日期时间字段,返回:

'event_datetime': datetime.datetime(2014, 6, 4, 0, 49, 38, tzinfo=<UTC>)

我正在尝试使用 json.dumps 序列化返回,而这种格式让我很伤心。重新格式化查询返回的日期时间以便正确序列化它的最佳方法是什么?

我尝试使用:

datetime.strptime('event_datetime',"datetime.datetime(%Y, %m, %d, %H, %M, %S, tzinfo=<%Z>)")

但它抱怨日期与格式字符串不匹配。

【问题讨论】:

我不明白你在做什么。 strptime 用于将字符串转换为日期时间,但您似乎已经有了日期时间。 啊,对不起。我遗漏了一个重要的细节。我正在尝试将日期时间转换为可以序列化并以 JSON 格式传递给另一个应用程序的字符串(这个 Django 应用程序本质上用作 REST 服务器)。我正在寻找一种从日期时间获取可序列化字符串的好方法。 【参考方案1】:

为了在某些查询集中使用“to_char”函数 PostgreSQL,可能通过使用 Func 进行注释,(来自 Django 1.8)

rows = some_queryset.annotate(str_date=Func(F('date'), Value('DD.MM.YYYY'), function='to_char'))

那么行中的每个项目都有“str_date”作为字符串日期,格式为“DD.MM.YYYY”

从 django.db.models 导入 Func, F, Value F('date') 中的'date' 是带有日期时间数据的模型字段

【讨论】:

【参考方案2】:

我最终使用 .extra 注入 PostgreSQL "to_char" 以重新格式化它。这是 PKKid here 建议的解决方案。

【讨论】:

以上是关于Django查询格式化日期时间输出的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 django 日期时间格式输出?

django 模板从查询集更改了日期格式

django rest框架列表查询自定义json数组结果响应,因为日期格式

格式化查询中现有数据的日期输出

Django GROUP BY strftime 日期格式

Django 仅基于日期过滤日期时间