Django选择相关树路径

2024-09-30 00:39:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个django模型,它表示树的边缘,还有一个表示节点的模型:

class Edge(models.Model):
nodeFrom = models.ForeignKey('Node', related_name='+')
nodeTo = models.ForeignKey('Node', related_name='+')

class Node(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.TextField()
    parentNode = models.ForeignKey('Node', null=True)

有没有一种方法可以为只命中一个数据库的子树构建树路径?你知道吗

我试过这个:

userEdges = Edge.objects.filter(nodeFrom__in=userNodes, nodeTo__in=userNodes).select_related('nodeFrom', 'nodeTo)

但如果我试着这样修路

def get_path(node, userEdges):
    path = [node]
    while path[-1].parentNode_id != None:   
        path.append(userEdges.get(nodeTo=node).nodeFrom)

    return path

数据库访问总是由以下行引起:

userEdges.get(nodeTo=node).nodeFrom

Tags: pathname模型nodegetmodelmodelsclass
1条回答
网友
1楼 · 发布于 2024-09-30 00:39:05

那是因为你在使用.get。由于您已经检索了userEdges并将它们存储在内存中,因此可以执行以下操作:

while ... :
    currentEdge = next(e for e in userEdges if e.nodeTo == node)
    path.append(currentEdge.nodeFrom)

相关问题 更多 >

    热门问题