Django框架中models的DateTimeField类型在MySQL数据库中插入的时间格式是“2019-02-16 10:25:04.186496”。
使用普通的ORM查询语句,输出的DateTimeField字段是“datetime.datetime(2019, 2, 16, 10, 8, 44, 642364)”。
如果你使用模版渲染的话,可以在前端页面使用过滤器格式化DateTimeField,获取正确的时间格式,例如:{{ infor.updatetime|date:“Y-m-d H:i:s” }}。
但是,如果我们想通过ajax json获取DateTimeField字段时就会报错,DateTimeField不能直接转换成json。
办法一
使用 for 循环去遍历查询结果,在 for 循环内使用 .strftime(’%Y-%m-%d %H:%M:%S’) 去格式化时间,然后转换成json。
如:
res_list = []
for i in data_obj:
i['inTime'] = i['inTime'].strftime('%Y-%m-%d %H:%M:%S')
res_list.append(i)
#
comment_obj.create_time.strftime("%Y-%m-%d %H:%M")
高效的办法
首先确定,Django的原生查询是不支持直接输出格式化后的日期的,那么我们只能使用MySQL的函数了。
使用 extra 可以很好的解决这个问题,使用 extra 可以执行 MySQL 的函数。extra 的内容大家可以自行百度。
# inTime是models中的字段名
list_raw = models.testTable.objects.filter(disable=0)\
.extra(select={"inTime": "DATE_FORMAT(inTime, '%%Y-%%m-%%d %%H:%%i:%%s')"})\
.values('id', 'showName', 'inTime').order_by('-inTime')