以下の 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のモデルフィールド参照