djangoで「get_object_or_404」じゃなくて「get_object_or_none」みたいな処理が欲しかったら…

2020年12月21日

djangoで「get_object_or_404」じゃなくて「get_object_or_none」みたいな処理が欲しかったら...

すいません「get_object_or_none」と言うのは無く次のように書くことが出来ます。


#[モデル名].objects.filter([カラム名]=[値]).first()
Content.objects.filter(name="suzuki").first()

参考:How do I get the object if it exists, or None if it does not exist?

今回djangoで「新規登録」と「編集」を同一画面で実装したいと思った時に気が付きました。データがなければ「インサート」あれば「アップデート」したかったのですが「get_object_or_404」だと新規登録時objectが取得できず「404」に飛んでしまいます。かと言って「objects.get」で取得できないと下のようなエラーが返ってきてしまいます。


matching query does not exist

「count」でobjectがあるか確認する方法もありましたがワンクッション入るのが気持ち悪いです。
そんなこんなで「get_object_or_none」で調べてみたらやはりありました「.first()」です。objectが取得できない場合は「None」が返ってきます。これで条件分岐を入れてあげれば「新規登録」と「編集」で挙動が分けられます。にしてもORMもっと使わないとなぁ...

YouTube

2020年12月21日