- 2009-02-03 (火) 21:15
- Django
DateTimeFieldのdefaultに、
xxx = models.DateTimeField(default=datetime.datetime.now())
と指定していたら、なんかおかしな値が入る。
具体的には同じ日付のデータがたくさん。すべてのデータが同じ日付な訳ではないけど。
ちなみに、テスト環境ではちゃんとしたデータが入る。
datetime.datetime.now()が評価されるのはプロセスが起動してクラスを読み込んだときっぽいね。
そりゃそんな気がするね。
だからプロセスごとに違う時間だけど、同じ時間がたくさん入るのか。
テスト環境は、1アクセスごとにプロセス再起動の設定になってるから問題ない様子。
auto_now_add=Trueとか使わなきゃいかんかなーと思ったら以下の情報を発見。
モデルフィールドのデフォルト値 - 偏った言語信者の垂れ流し
defaultの値を毎回評価するためには、関数を指定する。
callableかどうかを判断して、適切に関数を呼び出してくれるらしい。
解決。
ありがとうございました。
てことは、defaultは自分で作った関数とかも使えそうだね。
ところで、auto_nowとかauto_now_addとか無くなるって噂を見たことがある気がしてたんだけど、ドキュメントを見る限り残ったのかな?使っても良さげ?
- Newer: [django]さくらインターネットでPILがエラー
- Older: さくらインターネットでMySQL5
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://blog.joyfullife.jp/archives/2009/02/03211536.php/trackback
- Listed below are links to weblogs that reference
- [django]DateTimeFieldのdefault from 30からのBlog