私のdjangoアプリケーションは、次のようにいくつかの階層データをDBに保存します。
class Foo(Model):
# ... fields
parent = ForeignKey('self', null = True)
ここで、そのツリーデータをjqGridツリーに表示するには、そのデータを隣接リストまたはネストされたセットに変換する必要があります。これら2つの方法はjqGridでサポートされているためです。
隣接リストを作成する簡単な関数を次のように記述しました(擬似コード)
list=[]
def build_list(parent = None, level = 0)
data = Foo.objects.select_related().filter(parent=parent).annotate(sub_count = Count('foo'))
for x in objects:
obj = {
'name': x.name,
'id': x.pk,
'level': level,
'isLeaf': x.sub_count == 0
}
list.append(obj)
if x.sub_count > 0:
build_list(x.pk, level + 1)
ただし、レコード数が増えるにつれて、この再帰が発生するのではないかと心配しています。
それを行うためのより良い方法はありますか?
PS。アプリケーションの他の部分(および他のサービス)が現在の構造に依存しているため、モデルのスキーマ(定義)を変更できません。
PS。2.背後にあるデータベースはPostgresですが、可能であれば、ソリューションをdbに依存しないようにしたいです。