ジャンゴでは、モデルにデフォルトのタイムスタンプフィールドがありますか?


89

ジャンゴに-すべてのオブジェクトのデフォルトのタイムスタンプフィールドはありますか?つまり、モデルで「作成日」の「タイムスタンプ」フィールドを明示的に宣言する必要がありますか、またはこれを自動的に取得する方法はありますか?

回答:


170

デフォルトではそのようなことはありませんが、追加するのは非常に簡単です。クラスで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)

32

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):
    ....

2
model_utilsすでにを含むDjango もありTimeStampedModelますが、このパッケージの他に何も必要ない場合は、余分な重みを付けずにそのままにしてください。
boldnik 2013年

@boldnik私はシンプルさのファンです。
Yuji 'Tomita' Tomita

かなりクールです...とのタイムスタンプが必要な3つのクラスがcreatedありupdatedます。これは、それをきれいに行うための素晴らしい方法です。
ron_g


5

あなたはdjango-extensionsを試すことができます

タイムスタンプ抽象モデルを使用したい場合

from django_extensions.db.models import TimeStampedModel

class A(TimeStampedModel):
   ...

他の抽象モデルがあります。あなたもそれを使うことができます。


2

このフィールドを変更できるようにするには、次のように設定します auto_now_add=True:

日付

from datetime import date

models.DateField(default=date.today)

DateTimeの場合

from django.utils import timezone

models.DateTimeField(default=timezone.now)

0

私は一緒に行くと思います

created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)

使用に関するいくつかの説明が必要です

class TimeStampedModel(models.Model):
    created_on = models.DateTimeField(auto_now_add=True)

    class Meta:
         abstract = True
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.