web-dev-qa-db-ja.com

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

In Django-すべてのオブジェクトのデフォルトのタイムスタンプフィールドはありますか?つまり、モデルの 'created on'の 'timestamp'フィールドを明示的に宣言する必要がありますか?これを自動的に取得するには?

77
9-bits

デフォルトではそのようなことはありませんが、追加するのは非常に簡単です。 DateTimeFieldクラスでauto_now_addパラメーターを使用するだけです:

created = models.DateTimeField(auto_now_add=True)

「更新日」フィールドにauto_nowを使用することもできます。 auto_nowhere の動作を確認します。

auto_now_addhere の場合。

両方のフィールドを持つモデルは次のようになります。

class MyModel(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
133
MoshiBin

自動的に何か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):
    ....
28

Django-extensions (Django-admin.pyコマンドラインヘルパーに機能を追加するのに適したアプリです)を使用している場合、 their TimeStampedModel または カスタムTimeStampフィールド を使用

13
Timmy O'Mahony

Django-extensions を試すことができます

タイムスタンプ抽象モデルを使用する場合

from Django_extensions.db.models import TimeStampedModel

class A(TimeStampedModel):
   ...

他の抽象モデルがあります。それも使用できます。

4
Gaurav

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

日付について

from datetime import date

models.DateField(default=date.today)

DateTimeの場合

from Django.utils import timezone

models.DateTimeField(default=timezone.now)
1
chaggy

私は一緒に行くと思う

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
0