Django - 有啥方法可以立即获取外键对象?
Posted
技术标签:
【中文标题】Django - 有啥方法可以立即获取外键对象?【英文标题】:Django - any way to fetch foreign key objects instantly?Django - 有什么方法可以立即获取外键对象? 【发布时间】:2013-10-10 09:25:51 【问题描述】:我有一个关于 Django 中外键行为的问题。
我在我的模型中定义了一个树层次结构,其中父子关系在子模型中表示为外键。现在,从叶级别开始,我想检索父级、父级的父级等作为我定义的对象。
这可以通过简单地调用 Leaf.objects.all() 并从 Python 代码中正常访问对象来实现。
但是麻烦来了。对于每个这样的调用,Django 都会针对适当的外部 ID 进行 SELECT 查询。这显然是非常缓慢和低效的。我想告诉 Django 类似 “嘿,只需一次获取包括外键在内的所有数据,只需在数据库端进行连接和所有内容”。这可能吗?
【问题讨论】:
【参考方案1】:只需使用select_related():
Leaf.objects.select_related().all()
【讨论】:
@karthikr - 这是真的。我想说明它返回一个查询集并且可以进一步链接。 一个子节点只有 1 个父节点(如果不在顶层),尽管父节点最多可以有 n 个子节点。我使用了与this example 中相同的方法,其中描述了记者-文章关系。 @Danstahr - 你完全正确。我在考虑一个完全不同的案例。我删除了“旁注”——这里没有任何意义。以上是关于Django - 有啥方法可以立即获取外键对象?的主要内容,如果未能解决你的问题,请参考以下文章