Django Prefetch对象只会失败

时间:2018-03-29 09:36:41

标签: django django-queryset

我有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次查询

为什么?

1 个答案:

答案 0 :(得分:1)

您不能仅使用名称字段的查询集,因为Django至少需要product_id来将Category对象与Product匹配 - 因为您已将其排除,Django将每次自动进行单独的查询去取它这发生在查询时,甚至在它发送到模板的对象之前。

Category.objects.only('name', 'product_id')可行。