Django で有向グラフを作成したいのですが、各ノードは個別のフィールドなどを持つ個別のモデルになる可能性があります。
ここに私がこれまでに持っているものがあります:
from bannergraph.apps.banners.models import *
class Node(models.Model):
uuid = UUIDField(db_index=True, auto=True)
class Meta:
abstract = True
class FirstNode(Node):
field_name = models.CharField(max_length=100)
next_node = UUIDField()
class SecondNode(Node):
is_something = models.BooleanField(default=False)
first_choice = UUIDField()
second_choice = UUIDField()
(明らかにFirstNode
とSecondNode
は、よりドメイン固有のモデルのプレースホルダーですが、要点を理解していただければ幸いです。)
そこで、すべてのサブクラスを一度に照会して、一致するすべてのサブクラスを返したいと考えています。これを効率的に行う方法がよくわかりません。
私が試したこと:
- クエリを使用してサブクラスを反復処理する - クエリの数が非常に重くなる可能性があるため、これは好きではありません。
Node
コンクリート作り。どうやら、#1 に戻る各サブクラスをチェックする必要があるようです。
私が検討したこと:
- クラスを作成
Node
し、JSON blob を貼り付けます。私はこれが好きではありません。 - 外部テーブルまたはシステムへのポインターの格納。これは、UUID ごとに 2 つのクエリを意味します。理想的には 1 つが必要ですが、ピンチではおそらく問題なく実行できます。
では、私はこれにアプローチするのが間違っているのでしょうか、それとも Django の優れた機能を忘れているのでしょうか? 必要がなければ、スキーマレス DB を使用したくありません (このプロジェクトでは、Django 管理者はほとんど不可欠です)。何か案は?