为什么Django模型的时间字段不能正确默认为utcnow()?

0 投票
1 回答
1413 浏览
提问于 2025-04-17 23:45

这是我的模型:

class MyModel(models.Model):
    timeStamp = models.DateTimeField(default=datetime.datetime.utcnow())
    def __unicode__(self):
        return "MyModel ID=%s at <%s %s>" % (
            self.id, 
            self.timeStamp.strftime("%H:%M:%S.000").rstrip("0").rstrip("."), 
            self.timeStamp.strftime("%m/%d/%Y")
        )

看看我在控制台运行一些命令时发生了什么:

>>> from MyApp.models import *
>>> import datetime

>>> MyModel()
<MyModel: MyModel ID=None at <02:04:45 03/25/2014>>

>>> # Wait several seconds
>>> MyModel()
<MyModel: MyModel ID=None at <02:04:45 03/25/2014>>

>>> # Wait several seconds
>>> MyModel()
<MyModel: MyModel ID=None at <02:04:45 03/25/2014>>


>>> # Wait several seconds
>>> MyModel(timeStamp=datetime.datetime.utcnow())
<MyModel: MyModel ID=None at <02:07:16 03/25/2014>>

>>> # Wait several seconds
>>> MyModel()
<MyModel: MyModel ID=None at <02:04:45 03/25/2014>>

>>> # Wait several seconds
>>> MyModel()
<MyModel: MyModel ID=None at <02:04:45 03/25/2014>>

为什么时间戳的默认值(应该是为每个 MyModel 分配的 datetime.datetime.utcnow())在我创建的第一个实例中保持不变?

只有当我在构造函数中手动设置这个值时,它才会改变,但这样做看起来很别扭!

看起来默认值被缓存了,并且一直在重复使用。我该如何防止这种缓存现象发生呢?

1 个回答

1

因为你已经调用过它了。把它当作一个函数来传递吧。

timeStamp = models.DateTimeField(default=datetime.datetime.utcnow)

撰写回答