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',
还没有留言,还不快点抢沙发?