मेरा मानना है कि आप एक फ़ैक्टरी फ़ंक्शन बना सकते हैं जो आपके मॉडल को एक गतिशील db_table ।
def getModel(db_table):
class MyClass(models.Model):
# define as usual ...
class Meta:
db_table = db_table
return MyClass
newClass = getModel('29345794_table')
newClass.objects.filter( ...
संपादित करें:Django कक्षा के _meta
. का एक नया उदाहरण नहीं बनाता है विशेषता हर बार इस समारोह कहा जाता है। _meta
. के लिए एक नया उदाहरण बनाना यह वर्ग के नाम पर निर्भर है (Django को इसे कहीं कैश करना होगा)। रनटाइम पर क्लास का नाम बदलने के लिए मेटाक्लास का इस्तेमाल किया जा सकता है:
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'
>>> MyModel.objects.all()