diadia

興味があることをやってみる。自分のメモを残しておきます。

Django シグナル POST_SAVEのcreated について

created は引数

createdはpost_saveにのみ存在する引数である。これはBoolean値をとる。

レコードが作成された場合に True を返す。


どんな場面でcreatedを使うのか

post_saveが発動するのは、データオブジェクトがsave()メソッドされた後である。


このsave()はレコード(データオブジェクト)が作成されたとき、もしくはレコードが変更されたときである。createdはレコードが作成されたときにTrueを返すので、レコードの変更または作成の場合分けを行いたい時に都合が良い。

また補足としてpost_initシグナルも同じ使い方ができると考えられる。

これはModelインスタンスのinitメソッドが実行されたあとにシグナルが発行される。initメソッドはModelインスタンスが生成されたときに一回だけ実行されるのでpost_initはインスタンス生成時のみに限定することができる。

しかしながらdjango.contrib.auth.models.Userのようにユーザー登録を済ませたあとにシグナルを発行したい場合には使うことができない。なぜならUserクラスにはinitメソッドが無いからである。こういうケースにはpost_saveとcreate==Trueを使って対応していく。



if created == True :
# レコードが作成されたときに行ってほしい処理
if created == False :
# レコードが変更されたときに行ってほしい処理