2012-04-08 195 views
0

假設我有節點在表中表示以下非常簡單的樹形結構:如何從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

回答

0

試試這個:

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