普段仕事でSeasar2という化石を扱っている人間がDjangoで遊んでる際、findByIdで取得したentityのnull判定を実装するときにとても悩んだからメモを残す
Seasar2のこんな感じの処理をDjangoで書きたかった。
hoge.java
entity = XXXService.findById(param1);
if (entity == null) {
return false;
}
最初にDjangoのDBからの取得方法としてgetを使った実装をしていた。
hoge.py
entity = models.Entity.objects.get(colA == param1)
しかしこの方法では colA == param となるレコードがDBに存在しない場合にDoesNotExistが発生してしまう。
例外をキャッチして処理しても良いのだが、それはそれで何か個人的には好かない。
webでいろいろ調べていたら先人がいた
Djangoで空のクエリーセットをチェックする
ということは次のようにすればいけるのではとおもってやってみた
hoge2.py
querySet = models.Entity.objects.filter(colA == param)
if querySet.first() is None:
return False
filterでQuerySetを取得した上で、単体ならfirst()とか複数ならlistに変換して処理するとよさそうだ。