2016-11-19 13 views
0

クエリセットDOC(https://docs.djangoproject.com/en/1.10/ref/models/querysets/)、それが言う「内部的には、クエリセットを濾過し、構築することができ、、一般的には、実際にデータベースを押すことなく周りに渡されたスライスされた。あなたが評価するために何かをするまでは、データベース・アクティビティが実際に発生していませんクエリーセット。そして、「次のようにQuerySetを評価することができます:Iteration/スライス /。。 。Querysetはスライス時に評価されますか?ジャンゴで

私の質問は「スライス時にクエリーセットが評価されるかどうか」です。

答えて

2

の完全な段落は、スライスはクエリセットを評価する際に説明し、ないときは(強調鉱山):

  • スライス。 Limiting QuerySetsで説明したように、Pythonの配列スライシング構文を使用してQuerySetをスライスすることができます。評価されていないQuerySetをスライスすると、評価されていない別のQuerySetが返されますが、Slave構文の「step」パラメータを使用すると、Djangoはにデータベースクエリを実行し、リストを返します。評価されたQuerySetをスライスすると、リストも返されます。

あなたがステップパラメータを使用する場合、これはSQLクエリに変換することができないので、Djangoは唯一、たとえばqueryset[::2]ため、クエリセットを評価します。他のケースでは、評価されていないクエリセットをスライスすると別の未評価クエリセットが返され、DjangoはLIMITおよび/またはOFFSETをクエリに追加します。

+0

ありがとうございました。それは私に長い時間cofuses。 >< – hochun

関連する問題