如何从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