繁体   English   中英

Django select_related树路径

[英]django select_related tree path

我有一个代表一棵树的边缘和代表节点的模型的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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM