Django の datetime の問題 (default=datetime.now()) 質問する

Django の datetime の問題 (default=datetime.now()) 質問する

以下の 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

ジャンゴ v1.1.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のモデルフィールド参照

おすすめ記事