इनहेरिटेंस आपको कोड का पुन: उपयोग करने और क्लीनर डेटा मॉडल बनाने की सुविधा देता है। लेकिन Django विरासत प्राप्त करने के एक से अधिक तरीके प्रदान करता है, इसलिए सुनिश्चित करें कि आप अंतर जानते हैं।

मॉडल इनहेरिटेंस एक Django ORM सुविधा है जो डेवलपर्स को डेटाबेस मॉडल के बीच पदानुक्रमित संबंध बनाने की अनुमति देती है। यह ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के सिद्धांतों का लाभ उठाकर कोड के पुन: उपयोग, विस्तारशीलता और एक क्लीनर कोड बेस को सक्षम बनाता है।

चाहे आप एक जटिल वेब एप्लिकेशन बना रहे हों या किसी छोटे प्रोजेक्ट पर काम कर रहे हों, मॉडल इनहेरिटेंस महत्वपूर्ण लाभ प्रदान कर सकता है, जैसे अतिरेक को कम करना और सुसंगत व्यवहार सुनिश्चित करना।

Django में मॉडल इनहेरिटेंस के प्रकार

Django तीन प्रकार के मॉडल इनहेरिटेंस के लिए समर्थन प्रदान करता है:

  1. सार आधार वर्ग।
  2. मल्टी-टेबल इनहेरिटेंस.
  3. प्रॉक्सी मॉडल.

इनमें से प्रत्येक प्रकार के मॉडल इनहेरिटेंस के लाभ हैं और आप उनका उपयोग विशिष्ट उद्देश्यों के लिए करेंगे।

सार आधार वर्ग

सार आधार वर्ग सामान्य फ़ील्ड और विधियों को परिभाषित करने का एक तरीका प्रदान करते हैं जो कई मॉडल विरासत में प्राप्त कर सकते हैं। उदाहरण के लिए, यदि आपके पास समान फ़ील्ड साझा करने वाले दो मॉडल हैं, तो आप समान फ़ील्ड को परिभाषित करने के लिए एक सार आधार वर्ग का उपयोग कर सकते हैं। इस उदाहरण पर एक नजर डालें:

instagram viewer

कक्षाग्राहक(मॉडल। नमूना):
नाम = मॉडल. चारफ़ील्ड (अधिकतम लंबाई=50)
ईमेल = मॉडल. ईमेलफ़ील्ड()
ग्राहक_आईडी = मॉडल। इंटीजरफ़ील्ड()

कक्षाविक्रेता(मॉडल। नमूना):
नाम = मॉडल. चारफ़ील्ड (अधिकतम लंबाई=50)
ईमेल = मॉडल. ईमेलफ़ील्ड()
विक्रेता_आईडी = मॉडल। इंटीजरफ़ील्ड()

उपरोक्त कोड स्निपेट दो Django मॉडल को परिभाषित करता है: ग्राहक और विक्रेता. ये मॉडल दो सामान्य फ़ील्ड साझा करते हैं, अर्थात् नाम और ईमेल. इस अतिरेक को रोकने के लिए, आप सामान्य फ़ील्ड को रखने के लिए एक अलग मॉडल बना सकते हैं ग्राहक और विक्रेता मॉडल बनाएं और इसे अमूर्त बनाएं।

कक्षाउपयोगकर्ता जानकारी(मॉडल। नमूना):
नाम = मॉडल. चारफ़ील्ड (अधिकतम लंबाई=50)
ईमेल = मॉडल. ईमेलफ़ील्ड()

कक्षामेटा:
सार = सत्य

उपरोक्त कोड स्निपेट एक नए मॉडल को परिभाषित करता है और सेट करता है अमूर्त विशेषता सत्य. इसका मतलब है कि मॉडल अमूर्त होगा, और Django डेटाबेस में कोई तालिका नहीं बनाएगा।

आप पुनः लिख सकते हैं ग्राहक और विक्रेता इस तरह के मॉडल:

कक्षाग्राहक(उपयोगकर्ता जानकारी):
ग्राहक_आईडी = मॉडल। इंटीजरफ़ील्ड()

कक्षाविक्रेता(उपयोगकर्ता जानकारी):
विक्रेता_आईडी = मॉडल। इंटीजरफ़ील्ड()

उपरोक्त कोड स्निपेट में, ग्राहक और सेलर्स मॉडलों को विरासत में मिला है उपयोगकर्ता जानकारी के बजाय मॉडल मॉडल। नमूना.

आप अपने मॉडलों को अपने में पंजीकृत करके उन्हें व्यवस्थापक पैनल में देख सकते हैं admin.py इस प्रकार फ़ाइल करें:

से ।मॉडल आयात ग्राहक, विक्रेता

admin.site.register (ग्राहक)
admin.site.register (विक्रेता)

अपने मोड को माइग्रेट करें और निम्नलिखित को चलाकर अपना विकास सर्वर प्रारंभ करें कमांड लाइन:

पायथन मैनेजहोममेकमाइग्रेशन \
&& पायथन मैनेजहोम माइग्रेट करें \
&& पायथन मैनेजहोम रनसर्वर

अपनी व्यवस्थापक साइट पर जाएँ और अपने सुपरयूज़र विवरण के साथ लॉग इन करें। आपको प्रत्येक मॉडल के लिए सभी तीन फ़ील्ड देखनी चाहिए।

इस उदाहरण में, Django ने इसके लिए एक तालिका बनाई है ग्राहक और विक्रेता मॉडल। आप देख सकते हैं कि उपयोगकर्ता जानकारी मॉडल में कोई तालिका नहीं है क्योंकि यह अमूर्त है।

मल्टी-टेबल इनहेरिटेंस

आप मल्टी-टेबल इनहेरिटेंस का उपयोग तब कर सकते हैं जब पैरेंट मॉडल को भी चाइल्ड मॉडल के साथ डेटाबेस में एक टेबल के रूप में मौजूद होना चाहिए।

अमूर्त बेस क्लास इनहेरिटेंस के विपरीत, जहां पैरेंट मॉडल डेटाबेस में एक टेबल नहीं होगा, मल्टी-टेबल इनहेरिटेंस पैरेंट मॉडल के लिए एक टेबल बनाता है।

मल्टी-टेबल इनहेरिटेंस में, चाइल्ड मॉडल अपने मूल मॉडल से सभी फ़ील्ड और विधियों को प्राप्त करता है और अपने विशिष्ट फ़ील्ड जोड़ता है। विदेशी कुंजियाँ स्थापित करने में सहायता करें मॉडल संबंध माता-पिता और बच्चे के मॉडल के बीच।

यहां मल्टी-टेबल इनहेरिटेंस का एक उदाहरण दिया गया है:

कक्षाव्यक्ति(मॉडल। नमूना):
प्रथम_नाम = मॉडल. चारफ़ील्ड (अधिकतम लंबाई=100)
अंतिम_नाम = मॉडल. चारफ़ील्ड (अधिकतम लंबाई=100)

डीईएफ़नाम प्राप्त करें(खुद):
वापस करनाएफ"{स्वयं.पहला_नाम}{स्वयं.अंतिम_नाम}"

कक्षामेटा:
सार = सत्य

कक्षाकर्मचारी(व्यक्ति):
कर्मचारी_आईडी = मॉडल। चारफ़ील्ड (अधिकतम लंबाई=20)
विभाग = मॉडल. चारफ़ील्ड (अधिकतम लंबाई=100)
वेतन = मॉडल. फ्लोटफ़ील्ड()
जन्मतिथि = मॉडल. दिनांक फ़ील्ड()

कक्षाप्रबंधक(कर्मचारी):
शीर्षक = मॉडल. चारफ़ील्ड (अधिकतम लंबाई=100)

यह कोड स्निपेट तीन मॉडलों को परिभाषित करता है। पहला मॉडल, कहा जाता है व्यक्ति, अमूर्त है. यह किसी व्यक्ति के केवल प्रथम और अंतिम नाम को परिभाषित करता है।

दूसरा मॉडल, कहा जाता है कर्मचारी, के क्षेत्र विरासत में मिले हैं व्यक्ति लेकिन अतिरिक्त फ़ील्ड को परिभाषित करता है। कर्मचारी मॉडल अमूर्त नहीं है, इसलिए डेटाबेस में इसकी तालिका होगी।

अंतिम मॉडल, कहा जाता है प्रबंधक, के क्षेत्र विरासत में मिले हैं कर्मचारी मॉडल और एक फ़ील्ड जोड़ता है जिसे कहा जाता है शीर्षक.

के बीच संबंध कर्मचारी और प्रबंधक मॉडल कहा जाता है मल्टी-टेबल इनहेरिटेंस. अपने मॉडलों को माइग्रेट करें, उन्हें पंजीकृत करें admin.py, अपना सर्वर प्रारंभ करें, और व्यवस्थापक पैनल पर नेविगेट करें। आपको Django द्वारा बनाई गई दो तालिकाएँ देखनी चाहिए।

जब आप एक नया प्रबंधक जोड़ने का प्रयास करते हैं, तो आप देखेंगे कि इसमें सभी फ़ील्ड हैं कर्मचारी मॉडल के साथ-साथ इसका अपना कस्टम फ़ील्ड भी।

प्रॉक्सी मॉडल

एक प्रॉक्सी मॉडल आपको एक नया मॉडल बनाने में मदद करता है जो एक नई डेटाबेस तालिका बनाए बिना मौजूदा मॉडल से विस्तारित होता है। इस प्रकार के मॉडल इनहेरिटेंस में, प्रॉक्सी और मूल मॉडल एक ही तालिका साझा करेंगे। प्रॉक्सी मॉडल का उपयोग करके, आप कस्टम मॉडल बनाने और डिफ़ॉल्ट प्रबंधकों को बदलने जैसे काम कर सकते हैं।

आप जोड़कर एक प्रॉक्सी मॉडल बना सकते हैं प्रॉक्सी = सत्य में मेटा कक्षा। यहाँ एक उदाहरण है:

कक्षाप्रॉक्सीमॉडल(बेसमॉडल):

कक्षामेटा:
प्रॉक्सी = सत्य

प्रॉक्सी मॉडल का विशिष्ट उपयोग तब उचित होता है जब एक बेस मॉडल मौजूद होता है और अतिरिक्त कार्यक्षमता के साथ इसका एक विशेष संस्करण बनाने की आवश्यकता होती है। यहाँ एक बुनियादी उदाहरण है:

कक्षाडाक(मॉडल। नमूना):
शीर्षक = मॉडल. चारफ़ील्ड (अधिकतम लंबाई=30)
लेखक = मॉडल. चारफ़ील्ड (अधिकतम लंबाई=30)

डीईएफ़__str__(खुद):
वापस करना स्व.शीर्षक

कक्षाप्रॉक्सीपोस्ट(डाक):

कक्षामेटा:
प्रॉक्सी = सत्य

यह कोड स्निपेट दो मॉडलों को परिभाषित करता है: डाक और मेरी पद. डाक मॉडल शीर्षक और लेखक के लिए दो फ़ील्ड परिभाषित करता है। प्रॉक्सीपोस्ट मॉडल से विरासत में मिला है डाक नमूना।

उपरोक्त मॉडलों को माइग्रेट करें और बनाई गई तालिका में एक नई पोस्ट जोड़ें डाक नमूना।

पोस्ट ऐड करने के बाद ओपन करें प्रॉक्सी पोस्ट मेज़। आपको वह पोस्ट मिलनी चाहिए जिसे आपने इसमें जोड़ा है डाक इसमें टेबल.

आप पोस्ट में जो परिवर्तन करते हैं प्रॉक्सी पोस्ट तालिका संबंधित पोस्ट को प्रभावित करेगी डाक टेबल, और इसके विपरीत। इससे साबित होता है कि वे वास्तव में एक ही टेबल साझा करते हैं।

आप संशोधित कर सकते हैं एसटीआर() प्रॉक्सी मॉडल की विधि:

कक्षाप्रॉक्सीपोस्ट(डाक):

कक्षामेटा:
प्रॉक्सी = सत्य
आदेश देना = ["शीर्षक"]

डीईएफ़__str__(खुद):
वापस करना स्व.लेखक

इस संशोधन के साथ, ए प्रॉक्सीपोस्ट स्ट्रिंग प्रतिनिधित्व इसका लेखक होगा, शीर्षक नहीं। प्रॉक्सी मॉडल का क्रम भी डिफ़ॉल्ट आईडी फ़ील्ड के बजाय शीर्षक द्वारा होगा।

प्रॉक्सी मॉडल का उपयोग करते समय, आपको यह ध्यान रखना चाहिए कि आप अपने प्रॉक्सी मॉडल में कस्टम फ़ील्ड नहीं जोड़ सकते हैं। प्रॉक्सी मॉडल का प्राथमिक उपयोग मामला तब होता है जब आप चाहते हैं कि एक मॉडल कई व्यवहारों का समर्थन करे।

प्रॉक्सी मॉडल आपको किसी मौजूदा मॉडल के फ़ील्ड या अंतर्निहित डेटाबेस तालिका संरचना को संशोधित किए बिना उसके व्यवहार को बदलने में मदद करते हैं।

कोड पुन: प्रयोज्यता और संगठनात्मक संरचना के लिए मॉडल इनहेरिटेंस का उपयोग करें

मॉडल इनहेरिटेंस की विभिन्न तकनीकों का उपयोग करके, आप आसानी से अपने प्रोजेक्ट के लिए पुन: प्रयोज्य और व्यवस्थित कोड बना सकते हैं।

मॉडल इनहेरिटेंस अनावश्यक कोड से बचाता है और आपके कोड की रखरखाव और स्केलेबिलिटी को बढ़ाता है। इससे आपके कोड को नेविगेट करना भी आसान हो जाता है, जिससे विकास टीमों के बीच कुशल सहयोग को बढ़ावा मिलता है।

मॉडल इनहेरिटेंस के अलावा, Django टेम्प्लेट इनहेरिटेंस प्रदान करता है, जो आपके प्रोजेक्ट के लिए टेम्प्लेट को प्रबंधित और व्यवस्थित करने का एक शानदार तरीका है।