擅长:python、mysql、java
<p>可以使用<code>QuerySet</code>s来过滤其他的<code>QuerySet</code>,但正如这里的错误所说,您使用<code>owner</code>s,这意味着它希望与包装<code>User</code>s的<code>QuerySet</code>一起工作,但是这里提供了一个包含{<cd7>}的{<cd1>}。在</p>
<p>但是,我们可以使用以下查询:</p>
<pre><code>subs = <b>User</b>.objects.filter(<b>subscribed_to__subscriber=request.user</b>)
profiles = UserCommunityProfile.objects.exclude(owner<b>__in</b>=subs)</code></pre>
<p>此外,我们确实需要两个<code>QuerySet</code>,我们可以这样查询:</p>
^{pr2}$
<p>因此,这将提供一个<code>QuerySet</code>,其中包含<em>所有</em><code>UserCommunityProfile</code>,其中{<cd3>}是<code>subscribed_to</code>,而{<cd14>}是{<cd15>}。在</p>
<p>如果您像上面演示的那样“组合”查询集,那么通常这将导致一个<em>单个</em>查询。这通常是更有效的,因为所有处理都是在数据库级别完成的,并且数据库针对这些任务进行了优化。在</p>
<p>然而,在某些情况下,<em>不是</em>的情况下,例如,如果一个有两个不相交的条件,并且每个条件都产生一个(独立的)<code>JOIN</code>列表,那么最好用一个<code>UNION</code>重写查询。但事实并非如此。在</p>