Phoenixでモデルを動的に作成して使用する方法はありますか?クライアントのテーブルに関するメタデータを格納するアプリケーションがあります。フィールド(列名と型)をいくつか設定してから、CSVファイルを解析して保存します。格納されたメタデータから、Ectoを使用してクライアントテーブルを管理し、それに対してクエリを実行できるように、モデルを生成したいと思います。Phoenix Frameworkの動的モデル
私は組み込みのORMとtype()
関数を使用して、オンザフライでモデルを構築し、アプリケーション内でマイグレーションやその他のモデルコードを生成しなくても使用できるジャンゴバックグラウンドから来ています。 Pythonで
、私は(約)だろう。それに
class MetaModel(models.Model):
table_name = models.CharField(...)
model_name = models.CharField(...)
field_defs = JSONField(...)
def resolve_fields(self):
# takes values from `field_defs` and converts them into
# django field instances
def get_model(self):
class Meta:
app_label = 'dynamic'
db_table = self.table_name
fields = self.resolve_fields()
attrs = {'__module__': 'dynamic', 'Meta': Meta}
attrs.update(fields)
model = type(self.model_name, (models.Model,), attrs)
return model
def create_table(self):
with connection.schema_editor() as se:
model = self.get_model()
se.create_model(model)
を、私は、データベース内のテーブルを作成し、クライアント供給されたデータで動作するようにORMを活用することができますよ。
私は生のSQLを使ってそれを行うことができ、コマンドとクエリを実行するのにEctoを使用することができますが、SQLの束を書いて維持するのではなく、より体系化してEctoの内部を頼りにしたいと思いますテンプレート。
アドバイス(「いいえ、あなたはできません」)は非常に役に立ちます。ありがとう!
これは、あなたが与えられたモジュールを再定義については行くだろうか、本当にクールですか? – webdeb
これで、同じ名前/原子でモジュールをオーバーライドできます。 – webdeb
これは優れています!どうもありがとうございました! – vforgione