如何获取带有格式化日期时间字段的django查询集结果



我有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

相关内容

  • 没有找到相关文章

最新更新