如何从Django连接中的两个不同表中选择两个字段?

问题描述:

假设我有节点在表中表示以下非常简单的树形结构:如何从Django连接中的两个不同表中选择两个字段?

class Nodes(models.Model): 
    name = models.CharField(max_length=50) 
    flags = models.CharField(max_length=50) 
    parent = models.ForeignKey('self') 

想什么我知道的是,我怎么可以模拟在Django下面的SQL语句?

SELECT parent.name, child.name 
FROM Nodes as child 
JOIN Nodes as parent ON child.parent == parent.id 
WHERE parent.flags == 'STRING1' AND child.flags == 'STRING2'; 

我已经得到了最近似乎非常低效:

for parent in Nodes.objects.filter(flags='STRING1'): 
    for child in Nodes.objects.filter(flags='STRING2', parent=parent.id): 
     print parent.name, child.name 

有人可以帮助我了解,如果有更好的方法来执行这个SQL查询?

感谢,
- B

试试这个:

for node in Nodes.objects.filter(flags='STRING2', parent__flags='STRING1'): 
    print node.parent.name, node.name