在Django 中為多個表建立動態模型
對於保存大量具有共享架構和動態名稱的臨時表的資料庫,整合Django 帶來了挑戰。但是,可以使用工廠函數建立具有動態資料庫表的模型。
動態資料庫表管理
工廠函數傳回具有指定資料庫的模型桌。這允許基於表名稱進行動態資料綁定:
<code class="python">def getModel(db_table): class MyClass(models.Model): # Model definition goes here... class Meta: db_table = db_table return MyClass</code>
然後您可以使用特定表名稱實例化模型:
<code class="python">newClass = getModel('29345794_table') newClass.objects.filter(...)</code>
用於動態類別命名的元類別
由於Django 快取了類別的_meta 屬性,因此需要一個元類別來在運行時修改類別名稱:
<code class="python">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</code>
其他注意事項
雖然最初認為是不可變的,但資料庫表可以動態設定:
<code class="python">MyModel._meta.db_table = '10293847_table'</code>
以上是如何為具有共享架構和動態名稱的多個表動態建立 Django 模型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!