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