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