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()というメソッドもあります。
以上です。
コメント