জ্যাঙ্গোর ক্যোয়ারীসেট থেকে প্রায়শই আমি নিজেকে প্রথম অবজেক্টটি পেতে চাই, বা None
যদি কিছু না থাকে তবে ফিরে আসতে চাই । এটি করার অনেক উপায় রয়েছে যা সমস্ত কাজ করে। তবে আমি ভাবছি সবচেয়ে পারফরম্যান্ট কোনটি।
qs = MyModel.objects.filter(blah = blah)
if qs.count() > 0:
return qs[0]
else:
return None
এর ফলে দুটি ডাটাবেস কল আসে? এটা অপব্যয় বলে মনে হচ্ছে। এটি কোন দ্রুত?
qs = MyModel.objects.filter(blah = blah)
if len(qs) > 0:
return qs[0]
else:
return None
অন্য বিকল্পটি হ'ল:
qs = MyModel.objects.filter(blah = blah)
try:
return qs[0]
except IndexError:
return None
এটি একটি একক ডাটাবেস কল উত্পন্ন করে, যা ভাল। তবে একটি ব্যতিক্রমী অবজেক্ট তৈরি করতে প্রচুর সময় প্রয়োজন, যা যখন আপনার সত্যিকারের প্রয়োজন হয় তা-ও-পরীক্ষা যদি খুব প্রয়োজন হয় তখন এটি করা খুব স্মৃতি-নিবিড় বিষয়।
আমি কীভাবে এটি কেবলমাত্র একটি একক ডাটাবেস কল এবং ব্যতিক্রম অবজেক্টের সাথে মেমরি মন্থন না করে করতে পারি?
first()
এবং last()
সুবিধাদির পদ্ধতিগুলি যুক্ত করেছেন: ডকস.ডজ্যাঙ্গোপ্রজেক্ট
len()
হন, সন্ধানের ক্ষেত্রে ব্যবহার করবেন না , সর্বদা ব্যবহার করুন.count()
।