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