私はこれについて何人かの同僚と議論していました。あなたが1つだけを期待しているときにDjangoでオブジェクトを取得するための好ましい方法はありますか?
2つの明白な方法は次のとおりです。
try:
obj = MyModel.objects.get(id=1)
except MyModel.DoesNotExist:
# We have no object! Do something...
pass
そして:
objs = MyModel.objects.filter(id=1)
if len(objs) == 1:
obj = objs[0]
else:
# We have no object! Do something...
pass
最初の方法は、動作はより正しいようですが、制御フローで例外を使用しているため、オーバーヘッドが発生する可能性があります。2つ目はより回り道ですが、例外は発生しません。
これらのうちどれが好ましいと思いますか?どちらがより効率的ですか?
QS.get()
です。2.詳細:「1つだけを期待する」とは、常に0-1オブジェクトを意味しますか、それとも2つ以上のオブジェクトを持つことが可能であり、その場合も処理する必要があります(この場合len(objs)
はひどい考えです)?3.ベンチマークのないオーバーヘッドについては何も仮定しないでください(この場合try/except
、少なくとも呼び出しの半分が何かを返す限り、より高速になると思います)