2

这个例子开始,我想执行这样的反向查询:

result = Topping.objects.all().prefetch_related('pizza_set')

我希望这会返回一个数组数组。在每个单独的数组中,返回到比萨饼的反向查找本身应该是一个数组。

result = ['name':'Pineapple', 'pizza_set':[{'name':'Hawaiian'... ... }]]

照原样,我的查询没有通过 Pizza_set。任何想法我做错了什么?

4

1 回答 1

1

首先,这里没有“数组”(在 Python 中我们称之为“列表”,但没关系)。调用的结果all()是一个 QuerySet,它是一个类似列表的容器——它包含的东西也不是列表,而是相关类型的对象——在这种情况下是Topping实例。每个实例都是从数据库中填充的,并且使用点prefetch_related- 如您的链接中所述 - 是它为每个实例填充一个内部缓存,然后在您调用相关集时使用该缓存。您不需要直接访问该属性,但是当您调用obj.pizza_set.all()Topping 查询集中的任何项目时,它将被使用,您可以通过检查数据库命中来验证这一点。

于 2012-11-28T10:44:34.920 回答