如何為具有共享架構和動態名稱的多個表動態建立 Django 模型?

DDD
發布: 2024-10-25 01:42:30
原創
258 人瀏覽過

How can Django models be dynamically created for multiple tables with shared schemas and dynamic names?

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!