マルチテナント アプリケーションを設計する場合、ユーザーが独自のカスタム データ フィールドを定義できる機能を提供することが望ましいことがよくあります。 。ただし、リレーショナル データベースでの動的フィールドの作成と管理は複雑になる場合があります。この記事では、Django でこの課題に取り組むためのさまざまなアプローチを検討します。
django-eav パッケージは、現在いくつかの活発なフォークで維持されており、Entity-Attribute-Value パターンを実装しています。動的属性をいくつかの単純な Django モデルに保存することにより、このソリューションは以下を提供します。
ただし、潜在的なパフォーマンスとメンテナンスの問題があります。
PostgreSQL は、動的データを格納するために次のようないくつかのデータ型を提供します。
これらのフィールドはインデックス付きクエリを可能にし、次のように使用できます:
class Something(models.Model): data = JSONField(db_index=True) # JSON or JSONB something = Something.objects.create(data={'a': 1, 'b': 2}) Something.objects.filter(data__a=1)
あるいは、Django MongoDB は完全に動的なモデリング ソリューションを提供し、
from djangotoolbox.fields import DictField class Image(models.Model): exif = DictField() image = Image.objects.create(exif=get_exif_data(...))
Django-mutant は、Michael Hall のアプローチからインスピレーションを得た、動的な外部キーと多対多のフィールドを提供します。 Django South フックを活用して実行時にデータベース スキーマを動的に変更し、完全に動的な Django アプリ、モデル、フィールドを可能にします。
from dynamo import models test = models.DynamicModel.objects.create(name='Test') foo = models.DynamicModelField.objects.create(model=test, name='foo')
これらの動的なアプローチを使用する場合は、潜在的な安定性のリスクとロックに関する考慮事項に注意することが重要です。 。ただし、Django で動的データを管理するための強力なオプションが提供されます。
以上がマルチテナントアプリケーション用に動的 Django モデルフィールドを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。