Django: 強制的にINSERTする方法

2012年2月18日

Djangoでは、save()を使ってレコードを作成したり更新したりすると思います。

オブジェクトが新規作成される場合はINSERT。そうでない場合はUPDATEとDjango側が自動的に切り分けてくれます。

これは、DBレイヤーでは、

  • オブジェクトが持つ主キーがDB中に存在しない=INSERT
  • オブジェクトが持つ主キーがDB中に存在する=UPDATE

ということをしてくれています。

 

でも、毎回必ずINSERTしたい場合はどうでしょう?

その場合は、

  • create()
  • save(force_insert=True)

のいずれかで対応出来できます。

主キーが重複した場合はsave() / create()できず、IntegrityError例外が発生します。

Djangoマニュアル

 

save()create()時に明示的に例外を発生させたい場合がシチュエーションによってはあろうかと思います。

そんなときは、上記の方法を試してみて下さい。