ジャンゴに-すべてのオブジェクトのデフォルトのタイムスタンプフィールドはありますか?つまり、モデルで「作成日」の「タイムスタンプ」フィールドを明示的に宣言する必要がありますか、またはこれを自動的に取得する方法はありますか?
回答:
デフォルトではそのようなことはありませんが、追加するのは非常に簡単です。クラスでauto_now_add
パラメータを使用するだけDateTimeField
です:
created = models.DateTimeField(auto_now_add=True)
auto_now
「更新日」フィールドにも使用できます。auto_now
こちらの動作を確認してください。
auto_now_add
こちら。
両方のフィールドを持つモデルは次のようになります。
class MyModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
djangoがデフォルトで行うような音は自動的には鳴りません。タイムスタンプを要求する必要はありません。
タイムスタンプ/フィールド名などを忘れたくない場合は、抽象基本クラスを作成し、そこからすべてのモデルを継承します。
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
wherever.TimeStampedModel
代わりにインポートするのはそれほど多くないようですdjango.db.models.Model
class MyFutureModels(TimeStampedModel):
....
created
ありupdated
ます。これは、それをきれいに行うための素晴らしい方法です。
あなたが使用している場合はジャンゴ・エクステンション(django-admin.pyコマンドラインヘルパーに機能を追加するための良いアプリです)あなたは継承によって自由のためのこれらのモデルのフィールドを取得することができます彼らのTimeStampedModelまたはその使用して、カスタムタイムスタンプフィールドを
あなたはdjango-extensionsを試すことができます
タイムスタンプ抽象モデルを使用したい場合
from django_extensions.db.models import TimeStampedModel
class A(TimeStampedModel):
...
他の抽象モデルがあります。あなたもそれを使うことができます。
model_utils
すでにを含むDjango もありTimeStampedModel
ますが、このパッケージの他に何も必要ない場合は、余分な重みを付けずにそのままにしてください。