2017-05-05 8 views
6
class MyModel(models.Model): 
    id = models.IntegerField(primary_key=True) 

याक्या Django मॉडल में 'id' के रूप में फ़ील्ड को नाम सुरक्षित करना सुरक्षित है?

class MyModel(models.Model): 
    id_ = models.IntegerField(primary_key=True) 

pep8 single_trailing_underscore_ के अनुसार द्वारा इस्तेमाल किया जाना चाहिए अजगर कीवर्ड के साथ टकराव से बचने के लिए, लेकिन होने स्तंभ नामित id_ बदसूरत देखो और संभवतः किसी डेटाबेस स्तर पर अजगर से परिचित नहीं करने के लिए भ्रम की स्थिति पैदा होगी।

डीजेगो दस्तावेज़ 'आईडी' कॉलम नाम का उपयोग करते हैं: https://docs.djangoproject.com/en/1.11/ref/models/fields/#uuidfield

क्या यह फ़ील्ड 'id' के रूप में नाम सुरक्षित है?

+0

मुझे असुरक्षित के बारे में पता नहीं है, लेकिन मुझे पूरा यकीन है कि django स्वचालित रूप से आपके लिए यह फ़ील्ड शामिल करता है। –

उत्तर

5

अजगर किसी भी सन्दर्भ में builtins पीछा करने की अनुमति देता परिभाषित किया गया है बनाता है। एलईजीबी मॉडल (स्थानीय चर, संलग्न क्षेत्र, वैश्विक चर, बिल्टिन) में बिल्टिन सबसे कम प्राथमिकता पर हैं। उसी समय, अन्य मॉड्यूल में कोड इस छाया से प्रभावित नहीं होगा; id अभी भी अन्य संदर्भों में बिल्टिन को संदर्भित करेगा। तो यह छाया निर्मित करने के लिए पूरी तरह से सुरक्षित है। "असली" सवाल यह है कि क्या यह एक अच्छा विचार है। इस मामले में:

  • id() कम-सामान्य रूप से उपयोग किए जाने वाले बिल्टिन में से एक है।
  • किसी वर्ग के अंदर एक बिल्टिन को छायांकन करना किसी फ़ंक्शन या वैश्विक स्तर पर बिल्टिन को छायांकित करने से भ्रम पैदा करने की संभावना कम है, क्योंकि क्लास वेरिएबल्स आमतौर पर क्लास या इंस्टेंस के नाम से पहले एक बिंदु के साथ उपसर्ग होते हैं।
  • .id फ़ील्ड होने से Django कोड में idiomatic है, और वास्तव में, Django डिफ़ॉल्ट रूप से इस क्षेत्र को बनाता है यदि आप ऐसा नहीं करते हैं।
+0

Django इस क्षेत्र को एक डिफ़ॉल्ट और मानक के रूप में बनाता है, इसलिए इसे कुछ ऐसा करना जो पीके नहीं है, क्या यह एक स्पष्ट, रखरखाव योग्य, अन्य-देव-अनुकूल चीज होगी? – Jmons

+0

@Jmons: यह निर्भर करता है। यदि आपके प्रोजेक्ट में * हर * मॉडल उस पैटर्न का पालन करता है, तो आपको मौजूदा शैली के अनुरूप होना चाहिए। लेकिन अगर आप स्क्रैच से कुछ नया लिख ​​रहे हैं, तो मैं आपको 'आईडी' फ़ील्ड को अपनी प्राथमिक कुंजी रखने की अनुशंसा करता हूं। – Kevin

5

हां, id का उपयोग करना ठीक है यदि आप Django मॉडल के लिए कस्टम प्राथमिक कुंजी जोड़ रहे हैं, जैसे कि आपने दस्तावेज़ों में लिंक किया है। नियमित रूप से उपयोग तथापि के लिए, Django स्वचालित रूप से एक id क्षेत्र है कि के रूप में

id = models.AutoField(primary_key=True) 

Read more here

संबंधित मुद्दे