Bazı meslektaşlarımla bu konuda bir tartışma yapıyordum. Yalnızca bir tane beklerken Django'da bir nesne almanın tercih edilen bir yolu var mı?
İki açık yol:
try:
obj = MyModel.objects.get(id=1)
except MyModel.DoesNotExist:
# We have no object! Do something...
pass
Ve:
objs = MyModel.objects.filter(id=1)
if len(objs) == 1:
obj = objs[0]
else:
# We have no object! Do something...
pass
İlk yöntem davranışsal olarak daha doğru görünüyor, ancak kontrol akışında bazı ek yük getirebilecek istisnalar kullanıyor. İkincisi daha dolambaçlı ama bir istisna oluşturmayacak.
Bunlardan hangisi tercih edilebilir? Hangisi daha verimli?
QS.get()
iyidir. 2. Ayrıntılar önemli: "yalnızca birini beklemek" her zaman 0-1 nesne anlamına mı gelir, yoksa 2+ nesneye sahip olmak mümkündür ve bu durumda da ele alınmalıdır (bu durumdalen(objs)
korkunç bir fikirdir)? 3. Karşılaştırma olmadan genel gider hakkında hiçbir şey varsaymayın (Bu durumdatry/except
aramaların en az yarısı bir şey döndürdüğü sürece daha hızlı olacağını düşünüyorum )