Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

सिंगल Django मॉडल, एकाधिक टेबल?

मेरा मानना ​​है कि आप एक फ़ैक्टरी फ़ंक्शन बना सकते हैं जो आपके मॉडल को एक गतिशील 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()


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में डेटाबेस कैसे बनाएं

  2. चेक कॉलम/कुंजी मौजूद है?

  3. MySQL में एक महीने में दिनों की संख्या कैसे प्राप्त करें

  4. लौटाई गई MySQL क्वेरी में एक क्रमांकित सूची कॉलम जोड़ें

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