<blockquote>
<p><em>len()</em>. A QuerySet is evaluated when you call len() on it. This, as you might expect, returns the length of the result list.</p>
<p>Note: Don't use len() on QuerySets if all you want to do is determine the number of records in the set. It's much more efficient
to handle a count at the database level, using SQL's SELECT COUNT(*),
and Django provides a count() method for precisely this reason. See
count() below.</p>
</blockquote>
<p><a href="https://docs.djangoproject.com/en/dev/ref/models/querysets/#when-querysets-are-evaluated" rel="noreferrer">Source</a></p>
<p>因此,如果调用<code>len(userdesigns)</code>,而不是<code>userdesigns.count()</code>,django将在单个查询中从表中请求所有相关数据。之后,您可以访问<code>userdesigns</code>变量的所有项,不会进行其他查询。</p>
<pre><code>>>> m = Model1.objects.filter(desadder=1)
>>> len(m)
(0.000) SELECT "app1_model1"."id", "app1_model1"."desadder", "app1_model1"."test" FROM "app1_model1" WHERE "app1_model1"."desadder" = 1 ; args=(1,)
2
>>> m[0]
<Model1: Model1 object>
>>> m = Model1.objects.filter(desadder=1)
>>> len(m)
(0.000) SELECT "app1_model1"."id", "app1_model1"."desadder", "app1_model1"."test" FROM "app1_model1" WHERE "app1_model1"."desadder" = 1 ; args=(1,)
2
>>> m[0]
<Model1: Model1 object>
>>>
</code></pre>