Django の model で、以下のようにfilterで条件指定してレコードを取得する際、
1件だけいい感じで取得するには、どうしたらいいのかわからず、
Google検索した結果を記載します。

※[0]のようなインデックスのアクセスではなく、JPAのgetSingleResult() のように取得したかった。

    # 戻り値はQuerySetで、結果があれば、1件目を取得するし、なければ、Null(None)扱いにしている。
    f_artist_tmp = FestivalArtistTagTmp.objects.all().filter(tag_name=artist_string)
    if len(f_artist_tmp) == 0:
        f_artist_tmp_obj = None
    else:
        f_artist_tmp_obj = f_artist_tmp[0]

使用しているDjango Version

使用Version は 1.10 です。

pip list
----------------------------
Django (1.10)
----------------------------

記述方

以下、StackOverFlow の記事を見つけました。
Django: get the first object from a filter query or create - Stack Overflow Django 1.6 からは、
first()というメソッドが追加されたようで、そちらを使うと以下のように書けます。

    # 取得できれば、1件目が取得でき、データがなければ、Noneになる。
    f_artist_tmp = FestivalArtistTagTmp.objects.all().filter(tag_name=artist_string).first()

QuerySet の reference見ると、
あまり使わないかもしれませんが、first()だけじゃなくて、last()というメソッドもあります。

以上です。

コメント