1. ホーム
  2. python

[解決済み] Django の datetime の問題 (default=datetime.now())

2022-02-07 20:54:34

質問

以下のようなDBモデルを持っています。

from datetime import datetime    

class TermPayment(models.Model):
    # I have excluded fields that are irrelevant to the question
    date = models.DateTimeField(default=datetime.now(), blank=True)

以下のようにして、新しいインスタンスを追加しています。

tp = TermPayment.objects.create(**kwargs)

私の問題:データベース内のすべてのレコードの日付フィールドの値は同じで、それは最初の支払いの日付です。サーバーが再起動した後、1つのレコードには新しい日付があり、他のレコードは最初の日付と同じになっています。いくつかのデータがキャッシュされているように見えますが、どこにあるのかわかりません。

データベース: mysql 5.1.25

django v1.1.1

解決方法は?

それは次のようになります。 datetime.now() はモデルが定義されたときに評価されるのであって、レコードを追加するたびに評価されるわけではありません。

Djangoには、あなたがやろうとしていることを実現する機能がすでにあります。

date = models.DateTimeField(auto_now_add=True, blank=True)

または

date = models.DateTimeField(default=datetime.now, blank=True)

2番目の例と現在あるものとの違いは、括弧がないことです。を渡すことで datetime.now この関数は、レコードが追加されるたびに呼び出されます。もし、それを datetime.now() この場合、関数を評価し、その戻り値を渡しているだけです。

より詳しい情報は、Django の モデルフィールドリファレンス