কিছু সহকর্মীর সাথে এ নিয়ে আমার বিতর্ক ছিল। জ্যাঙ্গোতে যখন আপনি কেবল একটির প্রত্যাশা করছেন তখন কোনও জিনিস পুনরুদ্ধার করার জন্য কি কোনও পছন্দনীয় উপায় আছে?
দুটি সুস্পষ্ট উপায় হ'ল:
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()
ভাল। ২. বিশদ বিষয়: "কেবলমাত্র একটির প্রত্যাশা করা" এর অর্থ কি সর্বদা 0-1 টি অবজেক্ট থাকে, বা 2+ অবজেক্ট থাকা সম্ভব এবং সেই ক্ষেত্রেও এটি পরিচালনা করা উচিত (এই ক্ষেত্রেlen(objs)
একটি ভয়ঙ্কর ধারণা)? ৩. বেঞ্চমার্ক ব্যতীত ওভারহেড সম্পর্কে কিছু অনুমান করবেন না (আমি মনে করি যে এই ক্ষেত্রেtry/except
কমপক্ষে অর্ধেক কল ফিরে আসবে যতক্ষণ তত দ্রুততর হবে)