我的 django 应用程序在数据库中存储了一些分层数据,如下所示:
class Foo(Model):
# ... fields
parent = ForeignKey('self', null = True)
现在,为了在 jqGrid Tree 中显示该树数据,我需要将该数据转换为邻接列表或嵌套集,因为 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-agnostic