5

如果我有以下型号:

class Fubar(models.Model):
    name = models.CharField()

class Related(models.Model):
    fubar = models.ForeignKey(Fubar)

如果我使用 .related_set 访问相关,我希望 ORM 会神奇地缓存父 Fubar 对象:

fubar = Fubar.objects.all()[0]
related = fubar.related_set.all()[0]
related.fubar

这会产生 3 个查询,而我希望它只会产生 2 个查询,因为在这种情况下,related.fubar 可以优化为我在其上调用 RelatedManager 的同一个对象。

4

2 回答 2

2

虽然我不确定为什么这不起作用(也许魔法减少除外),但您可以轻松地避免额外的查询

fubar.related_set.select_related('fubar')[0]
于 2012-01-31T10:17:36.173 回答
0

在 django 1.4 中,他们引入了prefetch_related,它将在单个批次中自动检索每个指定查找的相关对象。

于 2012-01-31T10:18:25.873 回答