28

この問題は数週間断続的に発生しており、私のプロジェクトで発生したものとは異なります.

使用されている 2 つのモデルにはタイムスタンプ フィールドがあり、デフォルトで に設定されていますtimezone.now()

これは、エラー フラグを立てるシーケンスです。


  • モデル 1 は午後 7 時 30 分に作成されます

  • モデル 2 は午後 10 時に作成されますが、MySQL データベースでは午後 7 時 30 分として保存されます。

作成されたすべてのモデルには、特定の期間が経過するまで、実際の時刻ではなく午後 7 時 30 分未満のタイム スタンプが保存されます。その後、新しい時刻が設定され、後続のすべてのモデルがその新しい時刻になります... Bizzare


問題の発見に役立つ可能性のある追加の詳細:

tzinfoタイムゾーンからタイムゾーンを取り除き、それらを UTC に置き換えるために使用するメソッドがたくさんあります。

これはtimezone.now() - creationTime、プロジェクトで「モデルはこのずっと前に投稿された」機能を作成するための計算を行っているためです。ただし、実際にはこれが問題の原因であってはなりません。

使っても変わらないと思いdatetime.datetime.now()ます。

とにかく、助けてくれてありがとう!

4

2 に答える 2

66

先週、あるフィールドでこれに遭遇しましたdefault=date.today()。括弧を削除すると (この場合は try default=timezone.now)、callable がモデルに渡され、新しいインスタンスが保存されるたびに呼び出されます。括弧を使用すると、models.pyロード時に 1 回だけ呼び出されます。

于 2012-11-05T05:23:47.370 に答える
20

このようにパラメータを設定するだけauto_now_addです。

timestamp = models.DateTimeField(auto_now_add=True)

アップデート:

使用しないでくださいauto_now_add。これは推奨される方法ではありません。代わりに次のようにします。

from django.utils import timezone

timestamp = models.DateTimeField(default=timezone.now)
于 2012-11-05T09:54:42.417 に答える