Django の動的モデル テーブル マッピング
この質問では、単一の Django モデルを使用して、共通のスキーマを共有する動的テーブルと対話する可能性を検討します。 .
単一のモデルは複数のテーブルからデータを描画できますか?
いいえ、単一の Django モデルは複数のテーブルからデータを直接描画できません。 Django は、テーブルごとに 1 つのモデルの原則に基づいて動作します。ただし、この制限には回避策があります。
動的テーブル割り当て
1 つのアプローチは、動的 db_table 属性を持つ新しいモデル クラスを返すファクトリ関数を作成することです。 :
<code class="python">def getModel(db_table): class MyClass(models.Model): # Define model fields as usual ... class Meta: db_table = db_table return MyClass</code>
これにより、それぞれが特定の db_table を持つ新しいモデル クラスをオンザフライで作成できます。
実行時名前変更用のメタクラス
ただし、このアプローチでは、getModel 関数が呼び出されるたびに新しいクラス インスタンスを作成する必要があります。これを回避するには、メタクラスを使用してクラス名を動的に変更できます。
<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>
Dynamic Meta Attribute Assignment
さらに、Django では db_table を設定できます。既存のモデル クラスで動的に属性を設定します:
<code class="python">MyModel._meta.db_table = '10293847_table' MyModel.objects.all()</code>
これは、実行時にテーブルをモデルに割り当てるための別のオプションを提供します。
以上が以下にいくつかのタイトルのオプションを示します。それぞれが記事の異なる側面を強調しています。 **問題に焦点を当てる:** * **1 つの Django モデルは複数のテーブルにアクセスできますか?動的テーブル マッピングの探索** * **ジャンゴの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。