len()。 QuerySetは、len()を呼び出すと評価されます。予想通り、結果リストの長さを返します。
注:クエリーセットでlen()を使用しないでください。セット内のレコード数を決定するだけです。 SQLのSELECT COUNT(*)、 を使用してデータベースレベルでカウントを処理する方がはるかに効率的です 、Djangoは正確にcount()メソッドを提供しています。下記の count()を参照してください。
Source
あなたがlen(userdesigns)
代わりのuserdesigns.count()
を呼び出すのであれば、Djangoは、単一のクエリ内のテーブルからすべての関連データを要求します。その後、userdesigns
変数のすべての項目にアクセスできます。追加のクエリは作成されません。
>>> 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>
>>>
ああ、面白いです。上記のクエリを実行するのではなく、get-goの 'len()'を使うだけで、 'userdesigns 'のすべての項目が乗って来るだろうと言っていますか? – user1328021
はい。私はdjangoシェルの例を追加しました。 –
"パフォーマンスを向上させ、実行するデータベースクエリの数を減らそうとしているから" => Queryset.select_relatedも使用することを学ぶことができます。 –