您好,我的Django模型之一具有以下字段
ngIf
但是,当我检查数据类型时,它显示为字符串
created_at = models.DateTimeField(blank=True,null=True)
有趣的是,在我的生产服务器上运行的相同代码将其显示为
print(self.created_at)
print(type(self.created_at))
2018-01-10T20:53:19Z
<class 'str'>
我正在使用python3和Django 1.10.6。
你知道是什么原因造成的吗?
答案 0 :(得分:0)
数据库不存储Python数据类型,因此django ORM进行了一些转换和强制转换,以使您返回等效的Python类型。
例如,DateField字段使用Python datetime对象存储 数据。数据库不存储日期时间对象,因此字段值必须 转换为符合ISO标准的日期字符串,以插入到 数据库。
(来自documentation on the save()
method)
仅当已经有要从该特定字段读取的数据时,这才起作用。
换句话说,如果您要创建新记录,则该值将为字符串,因为该字段不存在任何值。
如果对象正在更新,那么如果您尚未更新该字段,则该值将为日期时间对象。
Django使用相同的save()
方法来创建新记录和更新现有记录。