首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django queryset.values_list()中日期时间字段到字符串的转换

django queryset.values_list()中日期时间字段到字符串的转换
EN

Stack Overflow用户
提问于 2013-06-13 11:25:43
回答 8查看 106.6K关注 0票数 42

我有个疑问,就像:

代码语言:javascript
复制
qs = MyModel.objects.filter(name='me').values_list('activation_date')

这里activation_date是模型中的DateTimeField。当我从这个qs下载excel工作表时,我不会得到string格式的激活日期。,我如何在字符串中转换这个字段(‘activation_date’),或者如何在qs中键入它?

EN

回答 8

Stack Overflow用户

发布于 2013-06-26 03:32:03

https://docs.djangoproject.com/en/2.2/ref/models/fields/#datetimefield

一个日期和时间,用Python表示,由一个datetime.datetime实例表示。

您可以直接获得DateTimeField转换的字符串表示形式:

代码语言:javascript
复制
str(obj)
# obj = qs[0][0] ? or qs[0][1] ?

您将得到如下结果(在本例中,我使用datetime.datetime.now(),因为DateTimeField是由datetime.datetime表示的相同行为):

代码语言:javascript
复制
>>> now = datetime.datetime.now()
>>> str(now)
'2013-06-26 00:14:26.260524'

如果您需要更少的信息或以其他模式格式化,则可以使用strftime()函数对其进行格式化。见:

代码语言:javascript
复制
>>> now.strftime('%Y-%m-%d %H:%M')
'2013-06-26 00:14'
票数 33
EN

Stack Overflow用户

发布于 2018-01-29 14:40:32

extra 在Django 2.0中被废弃

这就是为什么我认为获得一个紧张的日期时间的最佳解决方案是:

代码语言:javascript
复制
foo_bar = FooBarModel.objects.annotate(
    str_datetime=Cast(
        TruncSecond('some_datetime_field', DateTimeField()), CharField()
    )
).values('str_datetime').first()

结果是

代码语言:javascript
复制
foo_bar.str_datetime:
(str)'2014-03-28 15:36:55'

另外,我想提到的是,您也可以以您想要的任何方式格式化它:

代码语言:javascript
复制
from django.db.models import Value

foo_bar = FooBarModel.objects.annotate(
    day=Cast(ExtractDay('some_datetime_field'), CharField()),
    hour=Cast(ExtractHour('some_datetime_field'), CharField()),
    str_datetime=Concat(
        Value('Days: '), 'day', Value(' Hours: '), 'hour', 
        output_field=CharField()
    )
).values('str_datetime').first()

结果是

代码语言:javascript
复制
foo_bar.str_datetime:
(str)'Days: 28 Hours: 15'
票数 19
EN

Stack Overflow用户

发布于 2020-03-30 05:41:13

extra()是一个旧的API,Django打算在将来的某个时候放弃它。我会避免使用它。

相反,请尝试以下几点:

代码语言:javascript
复制
from django.db.models import F, Func, Value, CharField

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

这仅适用于支持to_char 日期类型格式化函数的数据库。默认情况下,Postgres提供此函数。

  • 如果使用MSSQL后端,则可以将to_charFORMAT交换。
  • 对于MySQL,使用DATE_FORMAT
  • 有关Oracle,请参阅他们的文档等。

在计算查询集之后,这将向返回的queryset中的每个对象添加注释formatted_date

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17085898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档