擅长:python、mysql、java
<p>原因是<code>Prefetch</code>需要一个Django<code>Queryset</code>作为<code>queryset</code>参数,而您给出的是一个对象的实例。在</p>
<p>按如下方式更改查询:</p>
<pre><code>link_data = LinkTargets.objects.filter(dashboard=True) \
.prefetch_related(
Prefetch(
'linkdata_set',
queryset=LinkData.objects.filter(pk=LinkData.objects.latest('id').pk)
)
)
</code></pre>
<p>这确实有一个不幸的结果,即在很大程度上取消了{<cd1>}的目的。在</p>
<p><strong><em>更新</em></strong>
此操作只全局预取一条记录;而不是每个<code>LinkTarget</code>最新的<code>LinkData</code>记录。在</p>
<p>要预取每个LinkTarget的max LinkData,您应该从LinkData开始:可以按如下方式实现:</p>
<p><code>LinkData.objects.filter(link_target__dashboard=True).values('link_target').annotate(max_id=Max('id'))</code></p>
<p>这将返回一个{{<cd8>}:12、<code>max_id</code>:3223}的字典</p>
<p>然后可以使用它返回正确的对象集;也许可以根据<code>max_id</code>的值过滤LinkData。在</p>
<p>看起来像这样:</p>
^{pr2}$