Django 更改查询结果的字段类型(!)
Posted
技术标签:
【中文标题】Django 更改查询结果的字段类型(!)【英文标题】:Django changes field types on query results (!) 【发布时间】: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
【参考方案1】:
Django 没有对它做任何事情。 DBAPI 适配器看到它是一个 DATETIME,因此返回一个日期时间。 CharField
中没有任何内容可以强制将日期时间发送给文本。
【讨论】:
如果我想这样做(强制日期时间到文本),我该怎么办?子类 CharField ? 当然。但您真正应该做的是在数据库中将其设为 VARCHAR。【参考方案2】:我认为, 而不是以日期时间格式保存值。尝试将其保存为 isoformat。您可以轻松转换。
【讨论】:
以上是关于Django 更改查询结果的字段类型(!)的主要内容,如果未能解决你的问题,请参考以下文章