我有Django模型,它有与其他模型关联的外键。每个模型都有相同的字段名(属性)created_at和updated_at
在每个django查询集结果中,我都会得到日期时间值。
Model.objects.all().values('created_at')
但我想将日期时间字段格式化为"DD-MM-YYYY HH:MM:SS",并减少django查询结果中的毫秒数。
如果我像下面的命令一样使用"extra"和date_trunc_sql
dt = connection.ops.date_trunc_sql('day','created_date')
objects.extra({'date':dt}).values('date')
这很好。但如果我像下面这样查询,它会引发歧义语句错误。
objects.extra({'date':dt}).values('date', 'x', 'y', 'z')
如何克服这个问题?
通过@Yannics答案解决:https://stackoverflow.com/a/60924664/5804947
这也避免了使用extra
,因为Django文档应该是"最后的手段"。
from django.db.models import F, Func, Value, CharField
qs.annotate(
formatted_date=Func(
F('created_at'),
Value('DD-MM-YYYY HH:MM:SS'),
function='to_char',
output_field=CharField()
)
)
找到了解决方案。
data = list(Model.objects.extra(select={'date':"to_char(<DATABASENAME>_<TableName>.created_at, 'YYYY-MM-DD hh:mi AM')"}).values_list('date', flat='true')
它不仅仅是tablename.attribute,当我们有多个数据库(不明确)时,它应该是dbname_tablename.aattribute
这将导致被修剪为"YYYY-MM-DD HH:MM"格式的created_ at日期时间值的列表。
我不认为values()
函数与格式化日期时间结果有任何关系。但为什么这会困扰你?当你试图显示它们时,你不能将它们转换成正确的格式吗?如果你试图在模板中呈现它们,django有模板过滤器date
来格式化你的日期时间值:https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#date