我有2个型号产品类别。他们之间存在多对多的关系。
我有以下代码:
在视图中:
Vector<byte>.Count
在模板中:
context['products']Product.objects.all().prefetch_related(Prefetch('categories', queryset=Category.objects.only('name')))
在这种情况下,{% for product in products %}
{{ product.categories.all.0.name}}
会被忽略,并且会针对每种产品在类别中执行新的查询。
如果我删除prefetch_related
,它只执行2次查询
为什么?
答案 0 :(得分:1)
您不能仅使用名称字段的查询集,因为Django至少需要product_id来将Category对象与Product匹配 - 因为您已将其排除,Django将每次自动进行单独的查询去取它这发生在查询时,甚至在它发送到模板的对象之前。
Category.objects.only('name', 'product_id')
可行。