2012-04-08 20 views
0

私は、テーブル内のノードによって表される以下の非常に単純なツリー構造があるとします。Django結合の2つの異なるテーブルから2つのフィールドを選択するにはどうすればよいですか?

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

私が知りたいのですがどのような私はジャンゴで次の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 
関連する問題