ฉันกำลังถกเถียงเรื่องนี้กับเพื่อนร่วมงานบางคน มีวิธีที่ต้องการในการดึงข้อมูลวัตถุใน Django เมื่อคุณต้องการเพียงวัตถุเดียวหรือไม่?
สองวิธีที่ชัดเจนคือ:
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
วิธีแรกดูเหมือนจะมีพฤติกรรมที่ถูกต้องมากขึ้น แต่ใช้ข้อยกเว้นในโฟลว์การควบคุมซึ่งอาจแนะนำค่าใช้จ่ายบางอย่าง ที่สองคือวงเวียนมากขึ้น แต่จะไม่ยกข้อยกเว้น
มีความคิดเห็นใดเกี่ยวกับข้อใดที่เป็นที่นิยมมากกว่านี้? อันไหนมีประสิทธิภาพมากกว่ากัน?
QS.get()
ที่ดี 2. รายละเอียดสำคัญ: "คาดหวังเพียงหนึ่งเดียว" หมายถึงวัตถุ 0-1 เสมอหรือเป็นไปได้ที่จะมีวัตถุ 2+ รายการและควรจัดการกรณีดังกล่าวด้วย (ในกรณีlen(objs)
นี้เป็นความคิดที่แย่มาก) หรือไม่? 3. อย่าคิดอะไรเกี่ยวกับค่าใช้จ่ายโดยไม่มีเกณฑ์มาตรฐาน (ฉันคิดว่าในกรณีนี้try/except
จะเร็วขึ้นตราบเท่าที่อย่างน้อยครึ่งหนึ่งของการโทรกลับบางสิ่งบางอย่าง)