Signals | Django ドキュメント | Django
ハマったところ
pre_save
ハンドラの引数に渡されるinstance
の attribute は「更新されるべき値」に置き換わっているので、「更新前の値」を得るにはBook.objects.get(id=instance.id)
などとして自前で DB から取得する必要がある。get()
を使うとbook
テーブルに一行も無い場合にエラーになる(ので、永遠に一行目を保存できない)。これを防ぐにはBook.objects.filter(id=instance.id).first()
として例外の発生を抑止する。