Django 1.8にはモデルの問題検出機能がいくつかあります。しかし、それが私に与えている警告の1つとして、私は問題を理解していますが、それが私に与えているヒントがどのように優れているかは理解できません。
これは私の(悪い)モデルフィールドです:
my_date = DateField(default=datetime.now())
それがなぜ悪いのかは簡単にわかります。しかし、これは私に与えているヒントです:
MyMoel.my_date:(fields.W161)提供されている固定のデフォルト値。
ヒント:このフィールドのデフォルトとして、固定された日付/時刻/日時の値を設定したようです。これはあなたが望むものではないかもしれません。現在の日付をデフォルトにしたい場合は、 `Django.utils.timezone.now`を使用します
だから、それはtimezone.now
を使用すると書かれていますが、それはdatetime.now
より優れているのでしょうか?それらはboth "fixed default" values ... timezone.now
just returns datetime instance、which is a fixed value ...
「use timezone.now
later "」というようなフラグを実際に挿入する必要があるのではないかと思います。しかし、それはヒントが言うことではありません...それで、その旗は何ですか?
関数datetime.now()
は現在、コードがインポートされるとすぐに、つまりサーバーを(再)起動したときに実行されます。後続のすべてのモデルインスタンスは同じ値になります。
代わりに、呼び出し可能な関数をdefault
に渡す必要があります。これは、モデルインスタンスがデフォルト値を必要とするたびに実行されます。ヒントは、括弧なしで文字どおりDateField(default=Django.utils.timezone.now)
を使用する必要があることを伝えます。
メッセージは少し誤解を招くかもしれませんが、Djangoはdatetime.now()
を使用したかDjango.utils.timezone.now()
を使用したかを知りません。