テーブル定義に作成日時や更新日時のフィールドを持つことがあると思います。
データの追加、更新時に毎回更新する必要があり、処理を実装するたびに毎回記述するのはコストが掛かる点と実装漏れ等の観点から処理を統一することが望まれます。
そのため、 Django において DB 保存時に日時を自動更新する方法について説明します。
model の定義
日時フィールドは以下のように model で定義すると思います。
# models.py
from django.db import models
class Sample(models.Model)
create_at = models.DateTimeField(blank=False, null=False) # 作成日時
update_at = models.DateTimeField(blank=False, null=False) # 更新日時
DateTimeField には自動更新用に2つのパラメータが用意されています。
- auto_now_add (default: False) : insert 時に現在日時を設定する。
- auto_now (default : False) : insert, update 時に現在日時を設定する。
これらのパラメータを定義時に設定することで登録、更新時に自動で日時を設定してくれる model が定義できます。
# models.py
from django.db import models
class Sample(models.Model)
create_at = models.DateTimeField(blank=False, null=False, auto_now_add=True) # 作成日時
update_at = models.DateTimeField(blank=False, null=False, auto_now=Truefd) # 更新日時
注意点
auto_now_add, auto_now は model の save メソッドが実行されたときにのみ処理がされます。
データを登録する create メソッドは内部で save メソッドを実行するため問題ありませんが、一括更新時に使用する bulk_create, bulk_update では設定されませんので注意が必要です。