【问题标题】:How to get datetimefield as string in django queryset's values_list() function?如何在 django 查询集的 values_list() 函数中获取日期时间字段作为字符串?
【发布时间】:2020-04-17 14:37:20
【问题描述】:

我有一个包含日期时间字段的模型。 我需要将该模型表中的行写入 Excel 表。

由于模型字段是日期时间字段,因此在写入 excel 时,它会为日期写入诸如 45976 之类的数字,而不是 2020-04-01 作为字符串。

我正在使用queryset.values_list(*fields_to_fetch) 获取行的值这个fields_to_fetch 包含我正在寻找的日期时间字段。当我打印类型时,它在控制台中显示DateTimeField

有没有办法将datetimefield 作为字符串类型?

我能够将values_list() 中的每个项目转换为列表,然后将datetimefield 转换为字符串并将其附加到新列表并写入excel。

我正在寻找一种方法来避免这一切。

【问题讨论】:

    标签: python django postgresql datetime django-models


    【解决方案1】:

    使用Cast(...)数据库函数,

    from django.db.models.functions import Cast
    from django.db.models import CharField
    
    cast_expr = Cast('date_time_field', output_field=CharField())
    data = ModelKlass.objects.annotate(dt_as_str=cast_expr).values_list('dt_as_str')

    【讨论】:

    • 在注释中,我想将 cast_expression 分配给我的模型中的相同字段名称,这会引发冲突。有什么解决方法吗?
    • 你不能这样做
    • 或者有没有办法让list中的元素成为tuple而不是values_list()中的tuple
    • 我不明白,你能解释一下吗?
    • 当我使用values_list() 时,该列表中的每个元素都是tuple 类型。我可以将每个元素作为list 而不是tuple。有什么参数可以传递给values_list()吗?
    猜你喜欢
    • 2017-02-20
    • 1970-01-01
    • 2018-05-25
    • 2021-05-30
    • 1970-01-01
    • 2016-11-28
    • 2011-05-30
    • 1970-01-01
    • 2021-01-05
    相关资源
    最近更新 更多