django queryset中datetile字段转换成日期格式

mysql中sql写法:

select id,
       DATE_FORMAT(create_time, '%Y-%m-%d %H:%i:%s') as create_time
from
    people

django orm中extra

qs=PeopleModel.objects.all()
qs.objects.extra(
    select={'create_time':
                'DATE_FORMAT(create_time, "%%Y-%%m-%%d %%H:%%i:%%s")'
                }).values('id', 'create_time')

extra使用背景:

Django 的orm语法难以简练地表达复杂的 WHERE 子句。针对这种情况,Django 提供了 extra() QuerySet 修改机制,它能在QuerySet 生成的 SQL 从句中注入新子句。 

extra缺点

由于产品差异的原因,这些自定义的查询难以保障在不同的数据库之间兼容(因为你手写 SQL 代码的原因),而且违背了 DRY 原则,所以如非必要,还是尽量避免写 extra。

django orm中annotate(建议使用)

from django.db.models import F, Func, Value, CharField

qs=PeopleModel.objects.all()

qs.annotate(
  formatted_date=Func(
    F('create_time'),
    Value('dd.MM.yyyy hh:mm:ss'),
    function='FORMAT',
    output_field=CharField()
  ))

extra()是 Django 在未来某个时候弃用的旧 API。建议使用annotate

如果使用:Postgres  function='to_char',

本文地址: http://chenxm.cc/article/1306.html
版权声明: 本文为原创文章,版权归  陈新明  所有,欢迎分享本文,转载请保留出处!
上一篇: Charles抓包神器配置和使用手册
下一篇: django raw TypeError: not enough arguments for format string
发表评论

还没有留言,还不快点抢沙发?