• Django版本:Django2.1.4
  • 数据库:MySQL5.7
    使用过Django框架的朋友应该都知道Django models中的DateTimeField类型。
    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)

能用倒是能用,但是看起来太 low 了。

更高效的办法

能不能通过修改查询语句,使查询结果直接输出格式化后的时间呢?
首先确定,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')

这样就能在查询语句中对DateTimeField进行格式化了。

使用不同的数据库,格式化日期的函数可能不同,里面可能会有点小坑。

select={"y-m-date": "date_format(create_time,'%%Y-%%m')"}).values_list("y-m-date").annotate( c=Count("nid")).values_list("y-m-date", "c")
我们在用django做项目的时候经常需要将后台接收到的数据传送给前端显示,最基础的方法就是在html文件里“挖坑”({{ data }}),再在后端将数据通过字典的形式进行传输,这种方法算是最为简便的方法了,但是在有一些场合,比如某个位置的数值会周期性地变,如果我们还使用这个方法的话,就需要不断刷新网页,这样对服务器的资源损耗是极高的,那么有没有一种方法可以让我们既降低内部损耗也能使用户在使用的时候尽可能减少多余操作呢? 答案就是JavaScript的定时器与ajax或getJson相配合 不过在这.
DateTimeField 日期时间字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python的datetime.datetime()实例,因此格式化时间非常简单 stime = vm_info.ctime #这是从数据库获取的时间,类型为datetime.datetime print(stime.strftime('%Y-%m-%d %H:%M:%S'))
最近在使用django的时候遇到一个问题,模型的一个字段是DateTimeFiled类型,并且auto_now_add=True,在做业务的时候,需要通过这个事件来检索信息,问题就出现了: DateTimeFiled类型字段在数据库存储格式是:2019-12-05 17:00:48.997827 而业务查询使用的是字符串:2019-12-05 17:00:48 这时候使用django的O...
尊重原创版权: https://www.gewuweb.com/hot/5401.html Django基础五之Ajax 尊重原创版权: https://www.gewuweb.com/sitemap.html 1. Ajax介绍 Django基础五之Ajax 2. Ajax后端传值 在输入框一和输入框二分别输入一个数字,然后点提交在第三个输入框显示结果. HTML 代码: <div class="container"> <div class="
Django框架models的DateTimeField类型在MySQL数据库插入的时间格式是“2019-02-16 10:25:04.186496”。 使用普通的ORM查询语句,输出的DateTimeField字段是“datetime.datetime(2019, 2, 16, 10, 8, 44, 642364)”。 如果你使用模版渲染的话,可以在前端页面使用过滤器格式化DateTimeF...
django设置字段动态默认时间的四种方式: create_time_one = models.DateTimeField(‘创建时间’, default=datetime.now()) update_time_one = models.DateTimeField(‘更新时间’, default=datetime.now) create_time_tow = models.DateTimeField('创建时间', auto_now_add=True) update_time_tow = models.Da
一、ORM常用字段与不常用字段 AutoField int类型且自增,必须填入参数 primary_key=True。当model如果没有自增字段,则自动会创建一个名为id的字段,并设置为主键、自增。 IntegerField 整数类型,其数值范围在 -2147483648 - 2147483647。 CharField 字符类型,必须提供max_le
一些说明: 表myapp_person的名称是自动生成的,如果你要自定义表名,需要在model的Meta类指定db_table参数,强烈建议使用小写表名,特别是使用MySQL作为后端数据库时。 id字段是自动添加的,如果你想要指定自定义主键,只需在其一个字段指定primary_key=True即可。如果Django发现你已经明确地设置了Field.primary_key,它将...
django1.4 html页面从数据库读出DateTimeField字段时,显示的时间格式和数据库存放的格式不一致,比如数据库字段内容为2012-08-26 16:00:00,但是页面显示的却是Aug. 26, 2012, 4 p.m. 为了页面和数据库显示一致,需要在页面格式化时间,需要添加{{ dayrecord.p_time|date:"Y-m-d H:i:s" }} 类似的过滤
如果是一对多的模式,可以直接使用直接序列关联的外键。 detail为关联的外键的model detail = DeitalSerializer() 如果是多对多的模式,那么用serializers.SerializeMethodField()获取到一个新的对象schedule, 然后再使用get_schedule方法来获取到所有的对象,obj.schedul...
数据库设置时区为:utc 系统设置时区为:'Asia/Shanghai' 1.赋值为:‘2019-04-24 15:00:00’ 数据库的结果为 ‘2019-04-24 07:00:00’ 查询获取结果为: ‘2019-04-24 07:00:00’ 时区为‘utc’ 2.赋值为:‘2019-04-2... 1. objects.all(): 获取模型的所有数据 2. objects.filter(**kwargs): 根据给定的条件过滤数据 3. objects.exclude(**kwargs): 根据给定的条件排除数据 4. objects.get(**kwargs): 根据给定的条件获取一条数据 5. objects.first() / objects.last(): 获取模型第一条/最后一条数据 6. objects.values(*fields): 获取指定字段的值 7. objects.values_list(*fields, flat=True/False): 获取指定字段的值的列表 8. objects.annotate(**annotations): 根据给定的注释进行聚合 9. objects.order_by(*fields): 根据给定的字段排序 10. objects.reverse(): 反转查询集 以上是一些Django ORM常用的获取数据查询集(queryset)的方法, 但是还有很多其他的方法,具体请参考Django官方文档