MySQL5.7.22(但早期版本也是如此)。Django1.8版本出现了这种情况,现在是Django1.11版本,所以mysql和django版本非常广泛。
class ShootFootAtMidnight(models.Model):
time = models.TimeField(blank=True, null=True)
time_source = models.ForeignKey(TimeSource)
def save(self, *args,**kwargs):
if self.time_source:
self.time = self.time_source.time
super(ShootFootAtMidnight, self).save(*args,**kwargs)
现在,如果在午夜时分有很多这样的事情发生,我迟早会面对这个问题: ValueError: hour must be in 0..23
小心,因为这不是传统的 models.DateTimeField
但这只是 time
其中一部分。这个错误从来没有发生在我身上 DateTimeFields
尽管这个物体有( auto_now
)同样如此。这个 models.TimeField
具有类型 time
在mysql数据库中 DateTimeField
有 datetime
以及 DateField
有 date
.
如果我用mysql提示符查看数据库,我会看到对象是honky和dory创建的,并且有一个 24:00:00
. 此值不是来自 auto_now
现场。django实际上创建了一个它无法读回的对象(?!?)。如果我手动修正时间 23:59:59
这个 ValueError: hour must be in 0..23
离开了,但我怎么能阻止这种事发生呢?
这只是我的怀疑:这是mysql方面的舍入问题吗?也许django框架提供了类似23:59:59:99934的内容。如果 time
db type的分辨率仅为3毫秒,然后它会将其四舍五入到24:00:00,而不使用 Django
我知道。但我还不能证明这一点,我找不到这个问题的确切解决办法 time
但我觉得django有时显示的不可能是6个小数。如果是这样的话我应该手动 self.time = self.time_source.time.replace(microsecond=0)
或者别的什么?
暂无答案!
目前还没有任何答案,快来回答吧!