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

साझा स्कीमा और गतिशील नामों के साथ एकाधिक तालिकाओं के लिए Django मॉडल को गतिशील रूप से कैसे बनाया जा सकता है?

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

How can Django models be dynamically created for multiple tables with shared schemas and dynamic names?

Django में एकाधिक तालिकाओं के लिए गतिशील मॉडल निर्माण

साझा स्कीमा और गतिशील नामों के साथ कई अस्थायी तालिकाओं वाले डेटाबेस के लिए, Django को एकीकृत करना चुनौतियां प्रस्तुत करता है . हालाँकि, डायनामिक डेटाबेस तालिकाओं के साथ मॉडल बनाने के लिए फ़ैक्टरी फ़ंक्शन का उपयोग करना संभव है।

डायनामिक डेटाबेस टेबल प्रबंधन

फ़ैक्टरी फ़ंक्शन एक निर्दिष्ट डेटाबेस के साथ एक मॉडल लौटाता है मेज़। यह तालिका नामों के आधार पर गतिशील डेटा बाइंडिंग की अनुमति देता है:

def getModel(db_table):
  class MyClass(models.Model):
    # Model definition goes here...
    class Meta:
      db_table = db_table
  return MyClass

फिर आप विशिष्ट तालिका नाम के साथ मॉडल को इंस्टेंट कर सकते हैं:

newClass = getModel('29345794_table')
newClass.objects.filter(...)

डायनामिक क्लास नेमिंग के लिए मेटाक्लास

चूंकि Django क्लास की _meta विशेषता को कैश करता है, इसलिए क्लास नाम को संशोधित करने के लिए मेटाक्लास आवश्यक है रनटाइम पर:

def getModel(db_table):
  class MyClassMetaclass(models.base.ModelBase):
    def __new__(cls, name, bases, attrs):
      name  = db_table
      return models.base.ModelBase.__new__(cls, name, bases, attrs)

  class MyClass(models.Model):
    __metaclass__ = MyClassMetaclass
    class Meta:
      db_table = db_table
  return MyClass

अतिरिक्त विचार

हालाँकि शुरू में अपरिवर्तनीय माना जाता था, डेटाबेस तालिका को गतिशील रूप से सेट किया जा सकता है:

MyModel._meta.db_table = '10293847_table'
नवीनतम ट्यूटोरियल अधिक>

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

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

Copyright© 2022 湘ICP备2022001581号-3