জ্যাঙ্গো প্রকল্পগুলিতে যেখানে আমি জানি যে ফাংশনটির সাথে সংঘর্ষ না ঘটে সে ক্ষেত্রে pk
সর্বদা id
আমি ফিরে আসতে পছন্দ করি (পরিবর্তনশীল নাম বাদে সর্বত্র)। এর কারণটি হ'ল এটি এমন একটি সম্পত্তি যা এট্রিবিটির নাম অনুসন্ধান করতে সময় লাগে তার চেয়ে attrib গুণ ধীর ।id
id()
pk
id
pk
meta
%timeit obj.id
46 ns ± 0.187 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
%timeit obj.pk
347 ns ± 11.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
এখানে প্রাসঙ্গিক জ্যাঙ্গো কোডটি রয়েছে:
def _get_pk_val(self, meta=None):
meta = meta or self._meta
return getattr(self, meta.pk.attname)
def _set_pk_val(self, value):
return setattr(self, self._meta.pk.attname, value)
pk = property(_get_pk_val, _set_pk_val)
এটি যখন আমার একটি ভেরিয়েবল ব্যবহার করা দরকার তখন এটি সত্যিই বিরল ঘটনা pk
। আমি আরও কিছু ভার্বোস ব্যবহার করা পছন্দ করি, user_id
তার পরিবর্তে pk
।
একই প্রকল্পটি অনুসরণ করা পুরো প্রকল্পে অগ্রাধিকারযোগ্য। আপনার ক্ষেত্রে id
একটি প্যারামিটারের নাম, কোনও সম্পত্তি নয়, তাই সময়কালের ক্ষেত্রে প্রায় কোনও পার্থক্য নেই। প্যারামিটারের নামগুলি অন্তর্নির্মিত id()
ফাংশনের নামের সাথে সংঘর্ষে আসে না , সুতরাং এটি id
এখানে ব্যবহার করা নিরাপদ ।
মোট কথা, ক্ষেত্রের নাম id
বা pk
শর্টকাট ব্যবহার করবেন কিনা তা বেছে নেওয়া আপনার পক্ষে । আপনি যদি জ্যাঙ্গোর জন্য একটি লাইব্রেরি বিকাশ করছেন না এবং সমস্ত মডেলের জন্য স্বয়ংক্রিয় প্রাথমিক কী ক্ষেত্রগুলি ব্যবহার করছেন তবে এটি id
সর্বত্র ব্যবহার করা নিরাপদ , যা কখনও কখনও দ্রুত হয়। অন্যদিকে, যদি আপনি প্রাথমিক কী ক্ষেত্রগুলিতে (সম্ভবত কাস্টম) সর্বজনীন অ্যাক্সেস চান তবে pk
সর্বত্র ব্যবহার করুন । মাইক্রোসেকেন্ডের এক তৃতীয়াংশ ওয়েবের জন্য কিছুই নয়।
id
এবং জন্যpk