从this example继续,我想执行这样的反向查询:
result = Topping.objects.all().prefetch_related('pizza_set')
我希望这会返回一个数组数组。在每个单独的数组中,反向查找回到披萨本身应该是一个数组。
result = ['name':'Pineapple', 'pizza_set':[{'name':'Hawaiian'... ... }]]
按原样,我的查询不会追溯到pizza_set。我有什么想法吗?
答案 0 :(得分:1)
首先,没有“数组”(在Python中我们称之为“列表”,但没关系)。调用all()
的结果是一个QuerySet,它是一个类似列表的容器 - 它包含的东西也不是列表,而是相关类型的对象 - 在本例中是Topping
个实例。每个实例都是从数据库中填充的,并且使用prefetch_related
- 如链接中所述 - 是它为每个实例填充内部缓存,然后在调用相关集时使用这些实例。您不需要直接访问该属性,但是当您在Topping查询集中的任何项目上调用obj.pizza_set.all()
时,将使用它,您可以通过检查数据库命中来验证。