【问题标题】:Django changes field types on query results (!)Django 更改查询结果的字段类型(!)
【发布时间】:2012-05-19 06:04:33
【问题描述】:

我有以下型号

类监视器数据(模型。模型): [... 其他的东西] starttime = models.CharField(max_length=64, db_column='spurlStartTime', blank=True)

所以,starttime 是一个 char 字段(在数据库中,它代表一个 datetime 列)

现在,这就是我正在做的事情:

oo=models.MonitorData.objects.all() 打印 oo[0].starttime 打印类型(oo[0].starttime)

这就是我得到的:

00:35:59

出于我自己的原因(不想讨论它们),我想将其作为 varchar 读取,然后自己解析。但是 django 不允许我这样做,因为出于我不知道的原因,它会将其转换为日期时间!

谁能向我解释为什么 django 有这种行为,我怎样才能找回我宝贵的字符串?有没有办法强制 django 将此值转换为字符串?

ps:我知道如何使用 str(),所以请不要回答我这个问题

【问题讨论】:

  • 我实际上有点惊讶这完全可以远程工作,但由于该字段是 DATETIME,Django 会将其视为日期时间。
  • 我假设oo[0].spurlstarttime 是一个错字,应该是oo[0].starttime
  • 是的,现在是开始时间 - 已修复
  • 是的,我知道这是一个日期时间,但我不明白为什么我不能把它当作一个字符串来处理。没有办法吗?
  • 因为它不是字符串。如果 Django 实际上被视为一个字符串,你会得到一个 IntegrityError

标签: django django-models django-orm


【解决方案1】:

Django 没有对它做任何事情。 DBAPI 适配器看到它是一个 DATETIME,因此返回一个日期时间。 CharField 中没有任何内容可以强制将日期时间发送给文本。

【讨论】:

  • 如果我想这样做(强制日期时间到文本),我该怎么办?子类 CharField ?
  • 当然。但您真正应该做的是在数据库中将其设为 VARCHAR。
【解决方案2】:

我认为, 而不是以日期时间格式保存值。尝试将其保存为 isoformat。您可以轻松转换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    • 2011-10-21
    • 2017-11-20
    • 1970-01-01
    • 2021-09-08
    相关资源
    最近更新 更多