Python 构建自引用外键行的层次结构

Python 构建自引用外键行的层次结构,python,django,foreign-keys,hierarchy,Python,Django,Foreign Keys,Hierarchy,我对这些型号有兴趣 def Group(Model): parent_group = ForeignKey("self") name = CharField(max=12) def Member(Model): group = ForeignKey(Group) name = CharField(max=12) score = BigIntegerField() 组可以嵌套任意次数。如何编写以以下格式返回数据的函数 {Group1: {Group2:

我对这些型号有兴趣

def Group(Model):
    parent_group = ForeignKey("self")
    name = CharField(max=12)

def Member(Model):
    group = ForeignKey(Group)
    name = CharField(max=12)
    score = BigIntegerField()
组可以嵌套任意次数。如何编写以以下格式返回数据的函数

{Group1: {Group2: {Group3: {Group4:{Member2: score}, Member1: score}, Member3:score}}}
我尝试过编写下面的递归函数,但它不起作用

rd={}
def查找父项(组):
如果group.parent\u组不是无:
返回查找父对象(组。父对象组)
其他:
返回组
def用_组填充_(父_组=无,rd_部分=无):
如果父组为“无”:
groups=Group.objects.all()
其他:
组=组.对象.过滤器(父组=父组)
旧零件=无
rd_零件=如果rd_零件不是其他rd_零件,则为rd
对于组中的组:
如果在rd中找到父项(组)。名称:
旧零件=旧零件
rd_part=rd_part.setdefault(group.name,{})
成员=成员.对象.过滤器(组=组)
对于成员中的成员:
rd_part[member.name]=member.score
如果len(Group.objects.filter(parent_Group=Group))>0:
用_组(组、rd_零件)填充_
rd_零件=旧的rd_零件
其他:
rd_零件=旧的rd_零件
其他:
ult\u parent=查找\u parent(组)
rd_part=rd.setdefault(ult_parent.name,{})
使用组填充组(ult\U父级、rd\U部件)
用_组()填充_

有更简单/正确的方法吗?

使用django MPTThanks,但我现在无法更改模型