Saya sedang berdebat tentang hal ini dengan beberapa rekan. Apakah ada cara yang disukai untuk mengambil objek di Django ketika Anda hanya mengharapkan satu?
Dua cara yang jelas adalah:
try:
obj = MyModel.objects.get(id=1)
except MyModel.DoesNotExist:
# We have no object! Do something...
pass
Dan:
objs = MyModel.objects.filter(id=1)
if len(objs) == 1:
obj = objs[0]
else:
# We have no object! Do something...
pass
Metode pertama tampaknya lebih benar secara perilaku, tetapi menggunakan pengecualian dalam aliran kontrol yang mungkin menyebabkan beberapa overhead. Yang kedua lebih bundaran tetapi tidak akan pernah memunculkan pengecualian.
Adakah pemikiran yang lebih disukai? Mana yang lebih efisien?
QS.get()
bagus. 2. Detail penting: apakah "hanya mengharapkan satu" berarti selalu objek 0-1, atau dimungkinkan untuk memiliki 2+ objek dan kasing itu juga harus ditangani (dalam hal inilen(objs)
adalah ide yang buruk)? 3. Jangan berasumsi apa-apa tentang overhead tanpa patokan (saya pikir dalam hal initry/except
akan lebih cepat selama setidaknya setengah dari panggilan mengembalikan sesuatu)