自動化無しに生活無し

WEBとかAIとかLinux関係をひたすら書く備忘録系ブログ

【Django】DateTimeFieldに自動的に現在時刻を入れるには、auto_now_addもしくはauto_nowフィールドオプションを指定【新規作成時・編集時の時刻】【※編集不可】

thumbnail

作成時と編集時の日時を自動的に入れたい場合は、auto_nowもしくはauto_now_addを指定する。

auto_nowはモデルのsaveメソッドが実行された時、auto_now_addはモデルに新規作成された時に、その時の日時が指定したフィールドに格納される。

つまり、モデルを下記のように組むと良いだろう。

from django.db import models

class Topic(models.Model):

    comment     = models.CharField(verbose_name="コメント",max_length=2000)

    create_dt   = models.DateTimeField(verbose_name="作成日時",auto_now_add=True)
    mod_dt      = models.DateTimeField(verbose_name="編集日時",auto_now=True)

こうすることで、作成と編集が自動的に記録される。

【注意】自動的に作成日時と編集日時が記録されるため、管理サイトから編集できない

このauto_now_add=Trueもしくはauto_now=Trueが指定されたフィールドは管理サイトから編集することはできない。(そのフィールドを指定すると、自動的にeditable=Falseが指定されてしまうため)

そのため、日付の再指定等を手動で行いたい場合は、このフィールドオプションは指定するべきではない。

その場合は下記のようにdefault=timezone.nowを指定すると良いだろう。

from django.db import models
from django.utils import timezone

class Topic(models.Model):

    comment = models.CharField(verbose_name="コメント",max_length=2000)
    dt      = models.DateTimeField(verbose_name="作成日時",default=timezone.now)
スポンサーリンク

シェアボタン

Twitter LINEで送る Facebook はてなブログ