"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > Django मॉडल का विस्तार: एक व्यापक मार्गदर्शिका

Django मॉडल का विस्तार: एक व्यापक मार्गदर्शिका

2024-11-08 को प्रकाशित
ब्राउज़ करें:764

Extending Django Models: A Comprehensive Guide

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

मॉडल वंशानुक्रम को समझना

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

  1. सार आधार वर्ग
  2. मल्टी-टेबल इनहेरिटेंस
  3. प्रॉक्सी मॉडल प्रत्येक प्रकार का अपना उपयोग मामला और फायदे हैं। आइए प्रत्येक में गोता लगाएँ।

सार आधार वर्ग

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

मान लें कि आप ऐसे मॉडलों का एक सेट बनाना चाहते हैं जो सामान्य संपर्क जानकारी साझा करते हैं। आप इस जानकारी को रखने के लिए एक अमूर्त आधार वर्ग को परिभाषित कर सकते हैं।

from django.db import models

class ContactInfo(models.Model):
    phone_number = models.CharField(max_length=15)
    email = models.EmailField()

    class Meta:
        abstract = True

class Person(ContactInfo):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)

class Company(ContactInfo):
    company_name = models.CharField(max_length=255)
    address = models.CharField(max_length=255)

ContactInfo फ़ील्ड फ़ोन_नंबर और ईमेल के साथ एक सार आधार वर्ग है। व्यक्ति और कंपनी दोनों को अपने विशिष्ट क्षेत्रों के साथ-साथ ये क्षेत्र भी विरासत में मिलते हैं।

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

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

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

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)

class Employee(Person):
    employee_id = models.CharField(max_length=100)
    department = models.CharField(max_length=100)

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

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

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

मान लें कि आपके पास एक व्यक्ति मॉडल है और आप एक कस्टम विधि जैसी अतिरिक्त कार्यक्षमता प्रदान करने के लिए एक प्रॉक्सी मॉडल बनाना चाहते हैं।

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)

    def full_name(self):
        return f"{self.first_name} {self.last_name}"

class PersonProxy(Person):
    class Meta:
        proxy = True

    def greet(self):
        return f"Hello, my name is {self.full_name()}"

पर्सनप्रॉक्सी एक प्रॉक्सी मॉडल है जो पर्सन मॉडल में एक अभिवादन विधि जोड़ता है। व्यक्ति के लिए डेटाबेस स्कीमा अपरिवर्तित रहती है।

व्यावहारिक विचार

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

मल्टी-टेबल इनहेरिटेंस तब आदर्श होता है जब आपको किसी मौजूदा मॉडल की कार्यक्षमता बढ़ाने और पैरेंट और चाइल्ड मॉडल के बीच स्पष्ट संबंध बनाए रखने की आवश्यकता होती है।

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

निष्कर्ष

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

इन विरासत रणनीतियों के साथ बेझिझक प्रयोग करके देखें कि वे आपकी अपनी परियोजनाओं में कैसे फिट बैठती हैं। मॉडल इनहेरिटेंस को समझना और उसका उपयोग करना आपके विकास कार्यप्रवाह को काफी हद तक बढ़ा सकता है और स्वच्छ, अधिक संगठित कोड की ओर ले जा सकता है।

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/saim_ansari/extending-django-models-a-comprehenive-guide-o34?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3