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

时间:2012-04-08 06:15:19

标签: sql django join foreign-key-relationship

假设我有一个由表中的节点表示的以下非常简单的树结构:

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

1 个答案:

答案 0 :(得分:0)

试试这个:

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