【问题标题】: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 类似 “嘿,只需一次获取包括外键在内的所有数据,只需在数据库端进行连接和所有内容”。这可能吗?

【问题讨论】:

    标签: python database django foreign-keys


    【解决方案1】:

    只需使用select_related():

    Leaf.objects.select_related().all()
    

    【讨论】:

    • @karthikr - 这是真的。我想说明它返回一个查询集并且可以进一步链接。
    • 一个子节点只有 1 个父节点(如果不在顶层),尽管父节点最多可以有 n 个子节点。我使用了与this example 中相同的方法,其中描述了记者-文章关系。
    • @Danstahr - 你完全正确。我在考虑一个完全不同的案例。我删除了“旁注”——这里没有任何意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 2021-01-14
    • 2017-12-17
    • 2018-12-01
    相关资源
    最近更新 更多