ここに私のモデルがあります:
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>>
timeStamp のデフォルト値 (MyModel ごとに datetime.datetime.utcnow() に割り当てられることになっている) が、最初に作成した値と同じままなのはなぜですか?
醜いハックであるコンストラクターでその値を手動で設定した場合にのみ変更されます!
デフォルト値がキャッシュされ、継続的に再利用されているようです。このキャッシュが発生しないようにするにはどうすればよいですか?