... ことをおすすめします。 このリファレンスでは、 データベースクエリガイド で提供された Blogモデルの例 を使用します。 QuerySet が評価されるタイミング ¶ 内部的には、 QuerySet は実際にデータベースにアクセスすることなく、構築、フィルタリング、スライス、受け渡し ... を行うことができます。クエリセットを評価するための操作が行われない限り、実際のデータベースへのアクセスは発生しません。 次の操作を行なったとき、 QuerySet は評価されま ... スライス。 QuerySet の要素数を制限する で説明されているとおり、 QuerySet はPythonのリストスライスを用いてスライスできます。未評価の QuerySet をスライスすると、通常は新たな未評価の QuerySet が返されます。しかし、スライスの "step" パラメータを使用した場合 ... ... ことをおすすめします。 このリファレンスでは、 データベースクエリガイド で提供された Blogモデルの例 を使用します。 QuerySet が評価されるタイミング ¶ 内部的には、 QuerySet は実際にデータベースにアクセスすることなく、構築、フィルタリング、スライス、受け渡し ... を行うことができます。クエリセットを評価するための操作が行われない限り、実際のデータベースへのアクセスは発生しません。 次の操作を行なったとき、 QuerySet は評価されま ... スライス。 QuerySet の要素数を制限する で説明されているとおり、 QuerySet はPythonのリストスライスを用いてスライスできます。未評価の QuerySet をスライスすると、通常は新たな未評価の QuerySet が返されます。しかし、スライスの "step" パラメータを使用した場合 ... ... ドだけを選択する追加条件を持ちます。1番目の QuerySet ( q1 ) は、絞り込みの過程において何ら影響を受けません。 QuerySet は遅延評価される ¶ QuerySet オブジェクトは遅延評価されます。 QuerySet を作る行為はいかなるデータベース操作も引き起こしません。たとえあ ... なたが 1 日中フィルタのスタックを積み上げたとしても、 QuerySet が 評価される までは、Django は実際にはクエリを実行しません。次の例を見てください。 >>> q = Entry . objects . filter ( headline__st ... 。一般に、 QuerySet の結果は、明示的に要求するまでデータベースから取得されません。取得するように要求した時点で、 QuerySet は 評価 され、データベースへのアクセスが発生します。評価が起こる正確なタイミングの詳細については、 QuerySet が評価されるタイミング ... ... ドだけを選択する追加条件を持ちます。1番目の QuerySet ( q1 ) は、絞り込みの過程において何ら影響を受けません。 QuerySet は遅延評価される ¶ QuerySet オブジェクトは遅延評価されます。 QuerySet を作る行為はいかなるデータベース操作も引き起こしません。たとえあ ... なたが 1 日中フィルタのスタックを積み上げたとしても、 QuerySet が 評価される までは、Django は実際にはクエリを実行しません。次の例を見てください。 >>> q = Entry . objects . filter ( headline__st ... 。一般に、 QuerySet の結果は、明示的に要求するまでデータベースから取得されません。取得するように要求した時点で、 QuerySet は 評価 され、データベースへのアクセスが発生します。評価が起こる正確なタイミングの詳細については、 QuerySet が評価されるタイミング ... ... es 属性を持ちます。別名が指定されなければ、 book__pages__sum のようになります。) また、現在登録されている著者の全書籍の平均評価を求めることもできます: >>> Author . objects . aggregate ( average_rating = Avg ( "book__rating" )) (結果は average_rating 属 ... 。 もし2つのアノテーションを別々のフィルタで付ける必要がある場合は、 filter 引数を任意の集計で使うことができます。たとえば、評価の高い書籍のカウントを持つ著者のリストを生成する場合は、以下のようにします。 >>> highly_rated = Count ( "book" , filter = Q ... ます。これは、 filter() と annotate() は可換な演算ではないことを意味します。 以下のことを仮定します。 出版社Aの本は2冊あり、評価は4と5である。 出版社Bの本は2冊あり、評価は1と4である。 出版社Cの本は1冊あり、評価は1である。 以下は Count 集計を使った例です ... ... es 属性を持ちます。別名が指定されなければ、 book__pages__sum のようになります。) また、現在登録されている著者の全書籍の平均評価を求めることもできます: >>> Author . objects . aggregate ( average_rating = Avg ( "book__rating" )) (結果は average_rating 属 ... 。 もし2つのアノテーションを別々のフィルタで付ける必要がある場合は、 filter 引数を任意の集計で使うことができます。たとえば、評価の高い書籍のカウントを持つ著者のリストを生成する場合は、以下のようにします。 >>> highly_rated = Count ( "book" , filter = Q ... ます。これは、 filter() と annotate() は可換な演算ではないことを意味します。 以下のことを仮定します。 出版社Aの本は2冊あり、評価は4と5である。 出版社Bの本は2冊あり、評価は1と4である。 出版社Cの本は1冊あり、評価は1である。 以下は Count 集計を使った例です ... ... se() 式は Python の if ... elif ... else 文のようなものです。指定された When() オブジェクトの各 condition は 1 つが True と評価されるまで順番に評価されます。一致した When() オブジェクトの result 式が返されます。 例: >>> >>> from datetime import date , ... の When() オブジェクトを引数として受け取ることができます。その他のオプションはキーワード引数で指定します。どの条件も TRUE と評価されない場合、キーワード引数 default で与えられた式が返されます。もし default 引数が与えられなかった場合、 None が使用されま ... ist ( "name" , "discount" ) <QuerySet [('Jane Doe', '5%'), ('James Smith', '0%'), ('Jack Black', '10%')]> 注釈 条件は順番に評価されるので、上の例では2番目の条件がJane DoeとJack Blackの両方にマッチしても正しい結果が得られることを覚えておいてください。こ ... ... se() 式は Python の if ... elif ... else 文のようなものです。指定された When() オブジェクトの各 condition は 1 つが True と評価されるまで順番に評価されます。一致した When() オブジェクトの result 式が返されます。 例: >>> >>> from datetime import date , ... の When() オブジェクトを引数として受け取ることができます。その他のオプションはキーワード引数で指定します。どの条件も TRUE と評価されない場合、キーワード引数 default で与えられた式が返されます。もし default 引数が与えられなかった場合、 None が使用されま ... ist ( "name" , "discount" ) <QuerySet [('Jane Doe', '5%'), ('James Smith', '0%'), ('Jack Black', '10%')]> 注釈 条件は順番に評価されるので、上の例では2番目の条件がJane DoeとJack Blackの両方にマッチしても正しい結果が得られることを覚えておいてください。こ ... ... Set を理解する ¶ QuerySet を理解することは、シンプルなコードでパフォーマンスを上げるために極めて重要です。特に: QuerySet の評価を理解する ¶ パフォーマンスの問題を回避するには、以下を理解することが重要です: QuerySet は遅延評価される こと。 いつQuerySet ... が評価されるのか 。 どのように データがメモリ上に保持されるか 。 キャッシュされる属性を理解する ¶ クエリセット全体のキャッシュだけ ... 切です。 しかし: contains() 、 count() 、 exists() を使いすぎない ¶ もしクエリセットの他のデータが必要になったときは、すぐに評価を行います。 例えば、 User と多対多の関連をもつ Group モデルを考えたとき、以下のコードが最適です: members = group . members ... ... king use of lazy patterns in your code. Django における遅延 ¶ Django は遅延をうまく使います。このよい例として、 QuerySet の評価が挙げられます。 QuerySet は遅延評価されます 。そのため、 QuerySet は作成後、記述したアイテムを取得するためにデータベースへの ... ェクトであって、最終的にはデータベースから取得されるアイテムのコレクションではないのです。 他方で、 特定の操作は QuerySet の評価を強制します 。 QuerySet の時期尚早な評価を回避することで、高コストで不必要なデータベースへのアクセスを節約できます。 Django ... には keep_lazy() デコレータもあります。これにより、遅延引数で呼び出された関数は、必要なときだけ評価されるようになります。このため、遅延引数 (高コストな引数である可能性もあります) は、必要なときだけ評価されるようになります。 ... 2026年10月08日