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 更改查询结果的字段类型(!)的主要内容,如果未能解决你的问题,请参考以下文章

更改 Django ModelFormset 中的字段类型

sql查询 自定义类型中某字段类型

根据请求类型更改 Django REST Framework ModelSerializer 中的字段?

如何用sql查询某值类型字段各个记录中含有的特定数字?

[django]用日期来查询datetime类型字段

[django]用日期来查询datetime类型字段