{"title":"QuerySet API リファレンス","version":"6.0","locale":"ja","docname":"ref/models/querysets","url":"/ja/6.0/ref/models/querysets/","canonical":"https://djangodocs.dev/ja/6.0/ref/models/querysets/","summary":"このドキュメントでは、 QuerySet API の詳細を説明しています。 モデル と データベースクエリ ガイドにある説明を前提としていますので、このドキュメントを読む前にこの 2 つを読んでおくことをおすすめします。 このリファレンスでは、 データベースクエリガイド で提供された Blogモデルの例 を使用します。…","html":"<h1><code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> API リファレンス<a class=\"heading-anchor\" href=\"#queryset-api-reference\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>このドキュメントでは、<code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> API の詳細を説明しています。<a class=\"reference internal\" href=\"/ja/6.0/topics/db/models/\"><span class=\"doc\">モデル</span></a> と <a class=\"reference internal\" href=\"/ja/6.0/topics/db/queries/\"><span class=\"doc\">データベースクエリ</span></a> ガイドにある説明を前提としていますので、このドキュメントを読む前にこの 2 つを読んでおくことをおすすめします。</p>\n<p>このリファレンスでは、 <a class=\"reference internal\" href=\"/ja/6.0/topics/db/queries/\"><span class=\"doc\">データベースクエリガイド</span></a> で提供された <a class=\"reference internal\" href=\"/ja/6.0/topics/db/queries/#queryset-model-example\"><span class=\"std std-ref\">Blogモデルの例</span></a> を使用します。</p>\n<section id=\"when-querysets-are-evaluated\">\n<span id=\"id1\"></span><h2><code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> が評価されるタイミング<a class=\"heading-anchor\" href=\"#when-querysets-are-evaluated\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>内部的には、 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> は実際にデータベースにアクセスすることなく、構築、フィルタリング、スライス、受け渡しを行うことができます。クエリセットを評価するための操作が行われない限り、実際のデータベースへのアクセスは発生しません。</p>\n<p>次の操作を行なったとき、 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> は評価されます。</p>\n<ul>\n<li><p><strong>イテレーション。</strong> <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> はイテラブルで、初めてイテレートした時にデータベースのクエリを実行します。たとえば、これはデータベースにある全エントリのheadline属性を出力するプログラムです:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">for</span> <span class=\"n\">e</span> <span class=\"ow\">in</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">():</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">headline</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>メモ: 1つ以上の結果が存在するかどうかを判定したいだけなら、これは使わないでください。 <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.exists\" title=\"django.db.models.query.QuerySet.exists\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">exists()</span></code></a> を使った方が効率的です。</p>\n</li>\n<li><p><strong>非同期イテレーション.</strong> <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">async</span> <span class=\"pre\">for</span></code> を使ってイテレートすることもできます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">async</span> <span class=\"k\">for</span> <span class=\"n\">e</span> <span class=\"ow\">in</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">():</span>\n    <span class=\"n\">results</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">e</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>クエリセットの同期的・非同期的イテレータは、同じキャッシュを共有します。</p>\n</li>\n<li><p><strong>スライス。</strong> <a class=\"reference internal\" href=\"/ja/6.0/topics/db/queries/#limiting-querysets\"><span class=\"std std-ref\">QuerySet の要素数を制限する</span></a> で説明されているとおり、 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> はPythonのリストスライスを用いてスライスできます。未評価の <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> をスライスすると、通常は新たな未評価の <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> が返されます。しかし、スライスの &quot;step&quot; パラメータを使用した場合、Djangoはデータベースクエリを実行し、リストを返します。評価された <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> をスライスした場合も同様にリストが返されます。</p>\n<p>未評価の <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> をスライスして別の未評価の <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> が返されても、それをさらに変更すること(たとえば、さらにフィルタを追加したり、順序を変更したりすること)は許されていないことに気を付けてください。これは、その操作がSQLに正しく変換されず、明確な意味を持たないためです。</p>\n</li>\n<li><p><strong>pickle 化/キャッシュ化。</strong>   <a class=\"reference internal\" href=\"#pickling-querysets\">QuerySet を pickle 化する</a> 際に何が行われるかは次節を参照してください。次節において重要なことは、結果がデータベースから読み出されるという点です。</p></li>\n<li><p><strong>repr()。</strong>  <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">repr()</span></code> が呼び出された時点で評価されます。これはPythonの対話型インタプリタでの利便性を図るためで、APIを対話的に使用する際にクエリの結果をすぐに確認できます。</p></li>\n<li><p><strong>len()。</strong> <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">len()</span></code> を呼び出した時点で評価されます。想像される通り、この操作は結果のリストの長さを返します。</p>\n<p>メモ: セット内のレコード数を決定したいだけであれば(そして実際のオブジェクトが必要ないのであれば)、SQLの <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span> <span class=\"pre\">COUNT(*)</span></code> を使ってデータベースレベルでハンドルする方がより効率的です。Djangoはまさにこの理由から <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.count\" title=\"django.db.models.query.QuerySet.count\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">count()</span></code></a> メソッドを提供しています。</p>\n</li>\n<li><p><strong>list()。</strong> <code class=\"docutils literal notranslate\"><span class=\"pre\">list()</span></code> を呼び出すことで、 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> の評価を強制します。たとえば:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">entry_list</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span>\n</code></pre></div>\n</li>\n<li><p><strong>bool()。</strong> <code class=\"docutils literal notranslate\"><span class=\"pre\">bool()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">or</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">and</span></code> または <code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> 文を使用してブール値として <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> をテストすると、クエリが実行されます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> も少なくとも1つ以上の結果が含まれれば <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> となり、そうでなければ <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> になります。例えば:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">if</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;Test&quot;</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;There is at least one Entry with the headline Test&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>注意: もしクエリの結果が少なくとも1つ存在するかどうかを確認したいだけであれば(そして実際のオブジェクトを必要としないのであれば)、 <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.exists\" title=\"django.db.models.query.QuerySet.exists\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">exists()</span></code></a> を使うべきです。</p>\n</li>\n</ul>\n<section id=\"pickling-querysets\">\n<span id=\"id2\"></span><h3><code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> の Pickle 化<a class=\"heading-anchor\" href=\"#pickling-querysets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> を <a class=\"reference external\" href=\"https://docs.python.org/3/library/pickle.html#module-pickle\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">pickle</span></code></a> 化するとき、pickle化の前にすべての結果がメモリにロードされるように強制されます。キャッシュされたクエリセットがリロードされた時、結果がすでに存在し、使用できる状態になっていることが望ましいからです(データベースからの読み込みには時間がかかるので、キャッシュとしての目的を達成できません)。つまり、 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> のpickle化を解除すると、解除した時点でデータベースにある結果ではなく、pickle化した時点での結果が出力されることになります。</p>\n<p>もし、後でデータベースから <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> を再生成するために必要な情報だけを取り出したい場合は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">query</span></code> を属性を取り出してください。そうすることで、以下のようなコードで本来の <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> (結果を読み込む前の状態)を再現できます:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">pickle</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"n\">pickle</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">)</span>  <span class=\"c1\"># Assuming &#39;s&#39; is the pickled string.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">qs</span> <span class=\"o\">=</span> <span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">qs</span><span class=\"o\">.</span><span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"n\">query</span>  <span class=\"c1\"># Restore the original &#39;query&#39;.</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">query</span></code> 属性は不透明なオブジェクトです。これは内側でのクエリ構築を表すもので、公開APIの一部ではありません。しかし、ここで説明しているように、この属性の内容のpickle化・pickle化の解除は安全に行うことができます(完全にサポートもされています)。</p>\n<aside class=\"admonition-restrictions-on-queryset-values-list admonition\">\n<p class=\"admonition-title\"><code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet.values_list()</span></code> における制限</p>\n<p>pickle化された <code class=\"docutils literal notranslate\"><span class=\"pre\">query</span></code> 属性を使って <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.values_list\" title=\"django.db.models.query.QuerySet.values_list\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">QuerySet.values_list()</span></code></a> を再生成すると、返り値は <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.values\" title=\"django.db.models.query.QuerySet.values\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">QuerySet.values()</span></code></a> に置き換えられます:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">pickle</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">qs</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values_list</span><span class=\"p\">(</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">qs</span>\n<span class=\"go\">&lt;QuerySet [(1, &#39;Beatles Blog&#39;)]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">reloaded_qs</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">reloaded_qs</span><span class=\"o\">.</span><span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"n\">pickle</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">pickle</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">qs</span><span class=\"o\">.</span><span class=\"n\">query</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">reloaded_qs</span>\n<span class=\"go\">&lt;QuerySet [{&#39;id&#39;: 1, &#39;name&#39;: &#39;Beatles Blog&#39;}]&gt;</span>\n</code></pre></div>\n</aside>\n<aside class=\"admonition-you-can-t-share-pickles-between-versions admonition\">\n<p class=\"admonition-title\">バージョン間でpickle化されたデータを共有することはできません</p>\n<p>pickle 化された <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> オブジェクトは、 pickle 化した Django のバージョンにおいてのみ有効です。 Django のバージョン N でpickle 化した場合、 Django のバージョン N+1 においてそれを読み取れる保証はありません。 pickle 化を長期的なアーカイブの手段として用いるべきではありません。</p>\n<p>pickle の互換性エラーは、静的に衝突したオブジェクトのように判定が難しいことがあるので、モデルをpickle化したデータを別のバージョンで復元しようとすると <code class=\"docutils literal notranslate\"><span class=\"pre\">RuntimeWarning</span></code> が送出されます。</p>\n</aside>\n</section>\n</section>\n<section id=\"queryset-api\">\n<span id=\"id3\"></span><h2><code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> API<a class=\"heading-anchor\" href=\"#queryset-api\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>これが <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> の正式な宣言です:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">QuerySet</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">query</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">hints</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>通常、 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> を操作する際には <a class=\"reference internal\" href=\"/ja/6.0/topics/db/queries/#chaining-filters\"><span class=\"std std-ref\">フィルタの連結</span></a> を使用します。これを実現するために、ほとんどの <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> のメソッドは新たなクエリセットを返します。これらのメソッドについては、このセクションで後ほど詳しく説明します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> クラスは、イントロスペクションのために以下のパブリックな属性を持っています:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.ordered\">\n<span class=\"sig-name descname\"><span class=\"pre\">ordered</span></span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.ordered\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> if the <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> is ordered — i.e. has an\n<a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.order_by\" title=\"django.db.models.query.QuerySet.order_by\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">order_by()</span></code></a> clause or a default ordering on the model.\n<code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> otherwise.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.db\">\n<span class=\"sig-name descname\"><span class=\"pre\">db</span></span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.db\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>このクエリが実行されるデータベースを示します。</p>\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><a class=\"reference internal\" href=\"#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> の <code class=\"docutils literal notranslate\"><span class=\"pre\">query</span></code> パラメータは、特殊なクエリのサブクラスが内部のクエリ状態を再構築できるようにするために存在します。このパラメータの値はクエリの状態の不透明な表現であり、パブリックAPIの一部ではありません。</p>\n</aside>\n</dd></dl>\n\n<section id=\"methods-that-return-new-querysets\">\n<h3>新しい <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>s を返すメソッド<a class=\"heading-anchor\" href=\"#methods-that-return-new-querysets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> が返す結果の種類や、SQLクエリの実行方法を変更するための、さまざまな <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> の改良メソッドをDjangoは提供します。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>これらのメソッドはデータベースクエリを実行しないので、非同期コードで実行しても <strong>安全</strong> であり、非同期処理専用のメソッドは存在しません。</p>\n</aside>\n<section id=\"filter\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">filter()</span></code><a class=\"heading-anchor\" href=\"#filter\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.filter\">\n<span class=\"sig-name descname\"><span class=\"pre\">filter</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">args</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.filter\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>与えられたルックアップパラメータにマッチする新しい <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> を返します。</p>\n<p>ルックアップパラメータ (<code class=\"docutils literal notranslate\"><span class=\"pre\">**kwargs</span></code>) は以下の <a class=\"reference internal\" href=\"#id4\">Field lookups</a> で説明されているフォーマットに従わなければなりません。複数のパラメータは、元となるSQLステートメントでは <code class=\"docutils literal notranslate\"><span class=\"pre\">AND</span></code> によって結合されます。</p>\n<p>より複雑なクエリを実行したい場合(たとえば  <code class=\"docutils literal notranslate\"><span class=\"pre\">OR</span></code> ステートメントを含むクエリ)は、  <a class=\"reference internal\" href=\"#django.db.models.Q\" title=\"django.db.models.Q\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Q</span> <span class=\"pre\">オブジェクト</span></code></a> (<code class=\"docutils literal notranslate\"><span class=\"pre\">*args</span></code>) を使用してください。</p>\n</section>\n<section id=\"exclude\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">exclude()</span></code><a class=\"heading-anchor\" href=\"#exclude\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.exclude\">\n<span class=\"sig-name descname\"><span class=\"pre\">exclude</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">args</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.exclude\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>与えられたルックアップパラメータにマッチ <em>しない</em> 新しい <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> を返します。</p>\n<p>ルックアップパラメータ (<code class=\"docutils literal notranslate\"><span class=\"pre\">**kwargs</span></code>) は下記の <a class=\"reference internal\" href=\"#id4\">Field lookups</a> で説明されているフォーマットに従わなければなりません。複数のパラメータは、元となるSQLステートメントでは <code class=\"docutils literal notranslate\"><span class=\"pre\">AND</span></code> によって結合され、全体が <code class=\"docutils literal notranslate\"><span class=\"pre\">NOT()</span></code> によって囲まれます。</p>\n<p>この例では <code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></code> が 2005-1-3より新しく、 <code class=\"docutils literal notranslate\"><span class=\"pre\">headline</span></code> が &quot;Hello&quot; であるようなエントリーを除外しています:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">pub_date__gt</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">),</span> <span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;Hello&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>SQL文では、次のように評価されます:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span>\n<span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"k\">NOT</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">pub_date</span><span class=\"w\"> </span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"s1\">&#39;2005-1-3&#39;</span><span class=\"w\"> </span><span class=\"k\">AND</span><span class=\"w\"> </span><span class=\"n\">headline</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>この例では <code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></code> が 2005-1-3より新しいか、 <code class=\"docutils literal notranslate\"><span class=\"pre\">headline</span></code> が &quot;Hello&quot; であるようなエントリーを除外しています:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">pub_date__gt</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;Hello&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>SQL文では、次のように評価されます:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span>\n<span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"k\">NOT</span><span class=\"w\"> </span><span class=\"n\">pub_date</span><span class=\"w\"> </span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"s1\">&#39;2005-1-3&#39;</span>\n<span class=\"k\">AND</span><span class=\"w\"> </span><span class=\"k\">NOT</span><span class=\"w\"> </span><span class=\"n\">headline</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s1\">&#39;Hello&#39;</span>\n</code></pre></div>\n<p>2つ目の例の方が、制約がより強いことに留意してください。</p>\n<p>より複雑なクエリを実行したい場合(たとえば  <code class=\"docutils literal notranslate\"><span class=\"pre\">OR</span></code> ステートメントを含むクエリ)は、  <a class=\"reference internal\" href=\"#django.db.models.Q\" title=\"django.db.models.Q\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Q</span> <span class=\"pre\">オブジェクト</span></code></a> (<code class=\"docutils literal notranslate\"><span class=\"pre\">*args</span></code>) を使用してください。</p>\n</section>\n<section id=\"annotate\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">annotate()</span></code><a class=\"heading-anchor\" href=\"#annotate\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.annotate\">\n<span class=\"sig-name descname\"><span class=\"pre\">annotate</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">args</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.annotate\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> 内の各オブジェクトに、指定された <a class=\"reference internal\" href=\"/ja/6.0/ref/models/expressions/\"><span class=\"doc\">クエリ式</span></a> または <a class=\"reference internal\" href=\"#django.db.models.Q\" title=\"django.db.models.Q\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Q</span></code></a> オブジェクトのリストを使ってアノテーション（注釈）を追加します。各オブジェクトには、以下のようなものをアノテーションとして追加できます。</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Value()</span></code> で指定する単純な値。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> で指定するモデル（または関連モデル）のフィールドへの参照。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Q()</span></code> で指定する真偽値（判定式）。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> 内のオブジェクトに関連付けられたオブジェクトに対して計算された集約式（平均、合計など）の結果。</p></li>\n</ul>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">annotate()</span></code> に渡される引数はそれぞれがアノテーションとなって、返される QuerySet 内の各オブジェクトに追加されます。</p>\n<p>Djangoが提供する集計関数については、下記の <a class=\"reference internal\" href=\"#id6\">集計関数</a> で説明されています。</p>\n<p>キーワード引数を使って指定されたアノテーションは、そのキーワードがアノテーションのエイリアスとして使用されます。匿名引数の場合は、集計関数の名前と集計対象のモデルフィールド名に基づいて自動的にエイリアスが生成されます。匿名引数として使用できるのは、単一のフィールドを参照する集計式のみです。それ以外のすべての式はキーワード引数として指定する必要があります。</p>\n<p>たとえば、ブログのリストを操作しているときに、ブログごとのエントリー数を決定したいとします:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Count</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;entry&quot;</span><span class=\"p\">))</span>\n<span class=\"go\"># The name of the first blog</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">name</span>\n<span class=\"go\">&#39;Blogasaurus&#39;</span>\n<span class=\"go\"># The number of entries on the first blog</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">entry__count</span>\n<span class=\"go\">42</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code> モデル自体は <code class=\"docutils literal notranslate\"><span class=\"pre\">entry__count</span></code> 属性を定義しませんが、集計式を指定したキーワード引数を用いることで、集計情報の名前を制御できます:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">number_of_entries</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;entry&quot;</span><span class=\"p\">))</span>\n<span class=\"go\"># The number of entries on the first blog, using the name provided</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">number_of_entries</span>\n<span class=\"go\">42</span>\n</code></pre></div>\n<p>集計処理についての深い議論については、 <a class=\"reference internal\" href=\"/ja/6.0/topics/db/aggregation/\"><span class=\"doc\">アグリゲーションについてのトピックガイド</span></a> を確認してください。</p>\n</section>\n<section id=\"alias\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">alias()</span></code><a class=\"heading-anchor\" href=\"#alias\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.alias\">\n<span class=\"sig-name descname\"><span class=\"pre\">alias</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">args</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.alias\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.annotate\" title=\"django.db.models.query.QuerySet.annotate\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">annotate()</span></code></a> と同じですが、 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> にオブジェクトをアノテーションするかわりに、後で他の <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> メソッドで再利用できるように式を保存します。これは式の結果自体は必要ないが、フィルタリングやソート、あるいは複雑な式の一部として利用する場合に便利です。未使用の値を選択しないことで、データベースで冗長な処理を行わずに済み、結果的にパフォーマンスを向上させることができます。</p>\n<p>例えば、5エントリ以上のブログを探したいが、エントリ数自体に興味がない場合は、以下のようにできます:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Count</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">blogs</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">alias</span><span class=\"p\">(</span><span class=\"n\">entries</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;entry&quot;</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">entries__gt</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">alias()</span></code> は <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.annotate\" title=\"django.db.models.query.QuerySet.annotate\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">annotate()</span></code></a>, <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.exclude\" title=\"django.db.models.query.QuerySet.exclude\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">exclude()</span></code></a>, <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">filter()</span></code></a>, <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.order_by\" title=\"django.db.models.query.QuerySet.order_by\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">order_by()</span></code></a>, <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.update\" title=\"django.db.models.query.QuerySet.update\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">update()</span></code></a> と組み合わせて使用できます。エイリアス式をその他のメソッド(<a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.aggregate\" title=\"django.db.models.query.QuerySet.aggregate\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">aggregate()</span></code></a> など)と組み合わせるためには、アノテーションを用いる必要があります</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">alias</span><span class=\"p\">(</span><span class=\"n\">entries</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;entry&quot;</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span>\n    <span class=\"n\">entries</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;entries&quot;</span><span class=\"p\">),</span>\n<span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span><span class=\"n\">Sum</span><span class=\"p\">(</span><span class=\"s2\">&quot;entries&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">filter()</span></code></a> と <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.order_by\" title=\"django.db.models.query.QuerySet.order_by\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">order_by()</span></code></a> は式を直接受け取ることができますが、式の構築と評価は同じ場所では行われないことが多いです(例えば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> メソッドは式を作成し、後からビューを表示するときに使用されるため)。 <code class=\"docutils literal notranslate\"><span class=\"pre\">alias()</span></code> は、複数のメソッドやモジュールにまたがる複雑な式を段階的に構築することができ、式の部分をエイリアスで参照し、最終結果に対してのみ <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.annotate\" title=\"django.db.models.query.QuerySet.annotate\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">annotate()</span></code></a> を使用する、といった使い方ができます。</p>\n</section>\n<section id=\"order-by\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">order_by()</span></code><a class=\"heading-anchor\" href=\"#order-by\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.order_by\">\n<span class=\"sig-name descname\"><span class=\"pre\">order_by</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">fields</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.order_by\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>デフォルトでは、 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> の返り値はモデルの <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code> 内の <code class=\"docutils literal notranslate\"><span class=\"pre\">ordering</span></code> オプションで指定されたタプルに基づいて並び替えられます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">order_by</span></code> メソッドを使うことで、 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> ごとにこれをオーバーライドできます。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__year</span><span class=\"o\">=</span><span class=\"mi\">2005</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;-pub_date&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>上のコードの結果は <code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></code> の降順、次に <code class=\"docutils literal notranslate\"><span class=\"pre\">headline</span></code> の昇順で並び替えられます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;-pub_date&quot;</span></code> のように、前にマイナス符号をつけることで降順を表現します。昇順は暗黙的に表現されます。ランダムに並び替えたい場合、次のように <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;?&quot;</span></code> を使います:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;?&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>メモ: <code class=\"docutils literal notranslate\"><span class=\"pre\">order_by('?')</span></code> クエリは、使用するデータベースバックエンドによっては高負荷で遅くなる可能性があります。</p>\n<p>異なるモデルのフィールドで並び替えたい場合、モデル間を横断して参照するクエリを発行するときと同じ構文を使用します。すなわち、フィールド名の後にダブルアンダースコア(<code class=\"docutils literal notranslate\"><span class=\"pre\">__</span></code>)を続けて、その後に新たなモデルのフィールド名を続けます。そして、それを結合したいモデルの数だけ繰り返します。例えば:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;blog__name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>異なるモデルを参照するフィールドで並び替えるとき、Djangoは参照先のモデルのデフォルトの順序を用いますが、 <a class=\"reference internal\" href=\"/ja/6.0/ref/models/options/#django.db.models.Options.ordering\" title=\"django.db.models.Options.ordering\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Meta.ordering</span></code></a> が設定されていなければ参照先のモデルのプライマリーキーで並び替えます。たとえば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code> モデルにはデフォルトで設定された順序がないとき:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;blog&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>...は以下と同じです:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;blog__id&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">ordering</span> <span class=\"pre\">=</span> <span class=\"pre\">['name']</span></code> を保持している場合、最初のクエリセットは以下と同じになります:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;blog__name&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"/ja/6.0/ref/models/expressions/#django.db.models.Expression.asc\" title=\"django.db.models.Expression.asc\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">asc()</span></code></a> か <a class=\"reference internal\" href=\"/ja/6.0/ref/models/expressions/#django.db.models.Expression.desc\" title=\"django.db.models.Expression.desc\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">desc()</span></code></a> を式の中で呼び出すことで、 <a class=\"reference internal\" href=\"/ja/6.0/ref/models/expressions/\"><span class=\"doc\">クエリ式</span></a> を使うこともできます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"n\">Coalesce</span><span class=\"p\">(</span><span class=\"s2\">&quot;summary&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">desc</span><span class=\"p\">())</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"/ja/6.0/ref/models/expressions/#django.db.models.Expression.asc\" title=\"django.db.models.Expression.asc\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">asc()</span></code></a> と <a class=\"reference internal\" href=\"/ja/6.0/ref/models/expressions/#django.db.models.Expression.desc\" title=\"django.db.models.Expression.desc\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">desc()</span></code></a> は、null値をどのようにソートするかを制御する引数 (<code class=\"docutils literal notranslate\"><span class=\"pre\">nulls_first</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">nulls_last</span></code>)をとります。</p>\n<p>Be cautious when ordering by fields in related models if you are also using\n<a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.distinct\" title=\"django.db.models.query.QuerySet.distinct\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">distinct()</span></code></a>. See the note in <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.distinct\" title=\"django.db.models.query.QuerySet.distinct\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">distinct()</span></code></a> for an explanation of how\nrelated model ordering can change the expected results.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>複数の値をとりうるフィールドを指定し、結果を並び替えることは許されています(たとえば、 <a class=\"reference internal\" href=\"/ja/6.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a> フィールド、もしくは <a class=\"reference internal\" href=\"/ja/6.0/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> フィールドの逆参照など)。</p>\n<p>このケースを考えます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Event</span><span class=\"p\">(</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">parent</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;self&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n        <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;children&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n\n\n<span class=\"n\">Event</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;children__date&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>ここで、それぞれの <code class=\"docutils literal notranslate\"><span class=\"pre\">Event</span></code> に対して、複数の並べ替えデータが存在する可能性があります; 複数の <code class=\"docutils literal notranslate\"><span class=\"pre\">children</span></code> を伴う <code class=\"docutils literal notranslate\"><span class=\"pre\">Event</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">order_by()</span></code> が作る新たな <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> においてそれぞれ複数回返されることになります。言い換えれば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> で <code class=\"docutils literal notranslate\"><span class=\"pre\">order_by()</span></code> を使うことで、もともと作業していたよりも多くの項目を返してしまう可能性があります。これはおそらく予期されることはなく、有用でもないでしょう。</p>\n<p>従って、複数の値をとりうるフィールドを結果の並び替えに用いる際は気を付けてください。 <strong>もし仮に</strong> 並び替える項目ごとに1つのデータしか存在しないのであれば、この方法でも問題はないでしょう。そうでなければ、結果が期待通りになることを確認してください。</p>\n</aside>\n<p>大文字と小文字を区別して並べ替えるかどうかを指定することはできません。Djangoは使用するデータベースバックエンドが通常このCase-sensitiveをどのように扱うかに従って結果を並び替えます。</p>\n<p><a class=\"reference internal\" href=\"/ja/6.0/ref/models/database-functions/#django.db.models.functions.Lower\" title=\"django.db.models.functions.Lower\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Lower</span></code></a> によって小文字に変換したフィールドで並び替えることで、一貫したルールでの並び替えを実現できます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"n\">Lower</span><span class=\"p\">(</span><span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">desc</span><span class=\"p\">())</span>\n</code></pre></div>\n<p>If you don't want any ordering to be applied to a query, not even the default\nordering, call <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.order_by\" title=\"django.db.models.query.QuerySet.order_by\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">order_by()</span></code></a> with no parameters.</p>\n<p>クエリに並び替えが適用されたかどうかは、 <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.ordered\" title=\"django.db.models.query.QuerySet.ordered\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">QuerySet.ordered</span></code></a> 属性を確認することで知ることができます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> がなんらかの方法で並び替えられれば、この属性の値は <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> となります。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">order_by()</span></code> の呼び出しごとに、過去の並び替えは解除されます。たとえば、以下のクエリでは並び替えに <code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></code> が使われ、 <code class=\"docutils literal notranslate\"><span class=\"pre\">headline</span></code> は使われません:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>ソートには計算コストがかかります。ソート条件に追加した各フィールドに、データベースへのコストが発生します。追加する各外部キーには、暗黙的にすべてのデフォルトのソート条件が含まれます。</p>\n<p>クエリでソートが指定されていない場合、データベースから返される結果の順序は指定されません。特定の順序が保証されるのは、結果内の各オブジェクトを一意に識別するフィールドの組み合わせでソートした場合だけです。例えば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> フィールドが一意でない場合、そのフィールドでソートしても、同じ名前のオブジェクトが常に同じ順序で表示されるとは限りません。</p>\n</aside>\n</section>\n<section id=\"reverse\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">reverse()</span></code><a class=\"heading-anchor\" href=\"#reverse\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.reverse\">\n<span class=\"sig-name descname\"><span class=\"pre\">reverse</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.reverse\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">reverse()</span></code> メソッドを使用すると、クエリセットの要素を返す順序を逆にすることができます。再度 <code class=\"docutils literal notranslate\"><span class=\"pre\">reverse()</span></code> を呼び出すと、順序が元に戻ります。</p>\n<p>クエリセットの「最後の」5つの項目を取り出すには、次のようにします:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">my_queryset</span><span class=\"o\">.</span><span class=\"n\">reverse</span><span class=\"p\">()[:</span><span class=\"mi\">5</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>この処理がPythonでシーケンスの最後からスライスするのとは全く違うことに注意してください。上記の例では、まず最後の項目が返され、次に最後から5番目の項目が返されます。Python のシーケンスに対して <code class=\"docutils literal notranslate\"><span class=\"pre\">seq[-5:]</span></code> を参照すると、最後の 5 番目の項目が最初に表示されるはずです。そのようなアクセスモード (末尾からのスライス) は、SQL で効率的に行うことができないため、Django ではサポートされていません。</p>\n<p>Also, note that <code class=\"docutils literal notranslate\"><span class=\"pre\">reverse()</span></code> should generally only be called on a <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>\nwhich has a defined ordering (e.g., when querying against a model which defines\na default ordering, or when using <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.order_by\" title=\"django.db.models.query.QuerySet.order_by\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">order_by()</span></code></a>). If no such ordering is\ndefined for a given <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>, calling <code class=\"docutils literal notranslate\"><span class=\"pre\">reverse()</span></code> on it has no real\neffect (the ordering was undefined prior to calling <code class=\"docutils literal notranslate\"><span class=\"pre\">reverse()</span></code>, and will\nremain undefined afterward).</p>\n</section>\n<section id=\"distinct\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">distinct()</span></code><a class=\"heading-anchor\" href=\"#distinct\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.distinct\">\n<span class=\"sig-name descname\"><span class=\"pre\">distinct</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">fields</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.distinct\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>SQL クエリで <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span> <span class=\"pre\">DISTINCT</span></code> を使用した新しい <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> を返します。これにより、クエリ結果から重複した行を取り除くことができます。</p>\n<p>デフォルトでは、 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> は重複した行を削除しません。なぜなら、 <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog.objects.all()</span></code> のような単純なクエリでは、結果の行が重複する可能性はないからです。しかし、クエリが複数のテーブルにまたがっている場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> が評価されたときに重複した結果を得る可能性があります。このような場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">distinct()</span></code> を使用します。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.order_by\" title=\"django.db.models.query.QuerySet.order_by\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">order_by()</span></code></a> の呼び出しで使用されるフィールドはすべて、SQL の <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span></code> 列に含まれます。これは <code class=\"docutils literal notranslate\"><span class=\"pre\">distinct()</span></code> と組み合わせて使用すると、時に予期せぬ結果をもたらすことがあります。リレーション先モデルのフィールドでソートした場合、それらのフィールドが <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span></code> の対象に追加され、重複した行が重複していないように出力されるかもしれません。余分なカラムは返される結果には現れないので (カラムは順序付けをサポートするためだけに存在するため)、重複した結果が返されているように見えることがあります。</p>\n<p>Similarly, if you use a <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.values\" title=\"django.db.models.query.QuerySet.values\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">values()</span></code></a> query to restrict the columns\nselected, the columns used in any <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.order_by\" title=\"django.db.models.query.QuerySet.order_by\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">order_by()</span></code></a> (or default model\nordering) will still be involved and may affect uniqueness of the results.</p>\n<p>The moral here is that if you are using <code class=\"docutils literal notranslate\"><span class=\"pre\">distinct()</span></code> be careful about\nordering by related models. Similarly, when using <code class=\"docutils literal notranslate\"><span class=\"pre\">distinct()</span></code> and\n<a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.values\" title=\"django.db.models.query.QuerySet.values\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">values()</span></code></a> together, be careful when ordering by fields not in the\n<a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.values\" title=\"django.db.models.query.QuerySet.values\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">values()</span></code></a> call.</p>\n</aside>\n<p>PostgreSQL のみ、位置引数 (<code class=\"docutils literal notranslate\"><span class=\"pre\">*fields</span></code>) を渡して、 <code class=\"docutils literal notranslate\"><span class=\"pre\">DISTINCT</span></code> を適用するフィールドの名前を指定できます。これは <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span> <span class=\"pre\">DISTINCT</span> <span class=\"pre\">ON</span></code> というSQLクエリに相当します。通常の <code class=\"docutils literal notranslate\"><span class=\"pre\">distinct()</span></code> 呼び出しでは、データベースはどの行が区別されるかを判断する際に、各行の <em>each</em> フィールドを比較しますが、フィールド名を指定した <code class=\"docutils literal notranslate\"><span class=\"pre\">distinct()</span></code> の呼び出しでは、データベースは指定されたフィールド名のみを比較できます。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>フィールド名を指定する場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> に <code class=\"docutils literal notranslate\"><span class=\"pre\">order_by()</span></code> を指定する必要があり、 <code class=\"docutils literal notranslate\"><span class=\"pre\">order_by()</span></code> のフィールドは <code class=\"docutils literal notranslate\"><span class=\"pre\">distinct()</span></code> のフィールドと同じ順序で始まる必要があります。</p>\n<p>例えば、<code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span> <span class=\"pre\">DISTINCT</span> <span class=\"pre\">ON</span> <span class=\"pre\">(a)</span></code> とすると、列 <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> の各値の最初の行が得られます。もし順序を指定しなければ、任意の行を得ることができます。</p>\n</aside>\n<p>例 (2つ目以降のコードは、PostgreSQL上でのみ動作します):</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">distinct</span><span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [...]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">distinct</span><span class=\"p\">(</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [...]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;blog&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">distinct</span><span class=\"p\">(</span><span class=\"s2\">&quot;blog&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [...]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;author&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">distinct</span><span class=\"p\">(</span><span class=\"s2\">&quot;author&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [...]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;blog__name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;mod_date&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">distinct</span><span class=\"p\">(</span><span class=\"s2\">&quot;blog__name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;mod_date&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [...]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;author&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">distinct</span><span class=\"p\">(</span><span class=\"s2\">&quot;author&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [...]&gt;</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.order_by\" title=\"django.db.models.query.QuerySet.order_by\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">order_by()</span></code></a> はデフォルトで定義されているリレーション先モデルのソートを使用することに注意してください。 <code class=\"docutils literal notranslate\"><span class=\"pre\">ORDER</span> <span class=\"pre\">BY</span></code> 句の先頭にある <code class=\"docutils literal notranslate\"><span class=\"pre\">DISTINCT</span> <span class=\"pre\">ON</span></code> 式が一致するように、明示的に <code class=\"docutils literal notranslate\"><span class=\"pre\">_id</span></code> やフィールド参照によるソートをする必要があるかもしれません。例えば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code> モデルが <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> による <a class=\"reference internal\" href=\"/ja/6.0/ref/models/options/#django.db.models.Options.ordering\" title=\"django.db.models.Options.ordering\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">ordering</span></code></a> を定義していた場合、:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;blog&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">distinct</span><span class=\"p\">(</span><span class=\"s2\">&quot;blog&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>このコードは、クエリが <code class=\"docutils literal notranslate\"><span class=\"pre\">blog__name</span></code> によってソートされるため <code class=\"docutils literal notranslate\"><span class=\"pre\">DISTINCT</span> <span class=\"pre\">ON</span></code> 式と食い違ってしまい、正しい結果を得られないでしょう。2つの式が一致するように、リレーションの <code class=\"docutils literal notranslate\"><span class=\"pre\">_id</span></code> フィールド（この場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">blog_id</span></code> ）またはフィールド参照（ <code class=\"docutils literal notranslate\"><span class=\"pre\">blog__pk</span></code> ）によって明示的にソートする必要があります。</p>\n</aside>\n</section>\n<section id=\"values\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code><a class=\"heading-anchor\" href=\"#values\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.values\">\n<span class=\"sig-name descname\"><span class=\"pre\">values</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">fields</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">expressions</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.values\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>イテラブルオブジェクトとして使用するとき、モデルインスタンスではなく辞書を返す <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> を返します。</p>\n<p>これらの辞書はそれぞれオブジェクトを表し、キーはモデルオブジェクトの属性名に対応しています。</p>\n<p>この例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code> によって得られる辞書と通常のモデルのオブジェクトを比較しています:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"go\"># This list contains a Blog object.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;Beatles&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Blog: Beatles Blog&gt;]&gt;</span>\n\n<span class=\"go\"># This list contains a dictionary.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;Beatles&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [{&#39;id&#39;: 1, &#39;name&#39;: &#39;Beatles Blog&#39;, &#39;tagline&#39;: &#39;All the latest Beatles news.&#39;}]&gt;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code> メソッドはオプションの位置引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">*fields</span></code> を取り、 <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span></code> で絞り込むフィールド名を指定します。フィールドを指定した場合、それぞれの辞書は指定したフィールドのキー/値のみを保有します。フィールドを指定しない場合、各辞書は、データベーステーブルのすべてのフィールドのキーと値を保有します。</p>\n<p>例:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [{&#39;id&#39;: 1, &#39;name&#39;: &#39;Beatles Blog&#39;, &#39;tagline&#39;: &#39;All the latest Beatles news.&#39;}]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [{&#39;id&#39;: 1, &#39;name&#39;: &#39;Beatles Blog&#39;}]&gt;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code> メソッドはオプションでキーワード引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">**expressions</span></code> を受け取り、 <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.annotate\" title=\"django.db.models.query.QuerySet.annotate\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">annotate()</span></code></a> に渡すこともできます:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models.functions</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Lower</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"n\">lower_name</span><span class=\"o\">=</span><span class=\"n\">Lower</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">&lt;QuerySet [{&#39;lower_name&#39;: &#39;beatles blog&#39;}]&gt;</span>\n</code></pre></div>\n<p>ソートには、組み込みのルックアップまたは <a class=\"reference internal\" href=\"/ja/6.0/howto/custom-lookups/\"><span class=\"doc\">カスタムルックアップ</span></a> が使用できます。例えば、次のようになります:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">CharField</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models.functions</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Lower</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">CharField</span><span class=\"o\">.</span><span class=\"n\">register_lookup</span><span class=\"p\">(</span><span class=\"n\">Lower</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"s2\">&quot;name__lower&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [{&#39;name__lower&#39;: &#39;beatles blog&#39;}]&gt;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code> 句内の集計処理は、同じ <code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code> 句内の他の引数の前に適用されます。別の値でグループ化する必要がある場合は、その値を先の <code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code> 句に追加してください。例えば:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Count</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"s2\">&quot;entry__authors&quot;</span><span class=\"p\">,</span> <span class=\"n\">entries</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;entry&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">&lt;QuerySet [{&#39;entry__authors&#39;: 1, &#39;entries&#39;: 20}, {&#39;entry__authors&#39;: 1, &#39;entries&#39;: 13}]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"s2\">&quot;entry__authors&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">entries</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;entry&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">&lt;QuerySet [{&#39;entry__authors&#39;: 1, &#39;entries&#39;: 33}]&gt;</span>\n</code></pre></div>\n<p>いくつかの際どいポイントについて言及しておきます:</p>\n<ul>\n<li><p>もし <code class=\"docutils literal notranslate\"><span class=\"pre\">foo</span></code> というフィールドが <a class=\"reference internal\" href=\"/ja/6.0/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> である場合、デフォルトの <code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">foo_id</span></code> という辞書キーを返します。それが実際の値を格納するモデルの隠し属性名だからです (<code class=\"docutils literal notranslate\"><span class=\"pre\">foo</span></code> 属性はリレーション先モデルを指します)。 <code class=\"docutils literal notranslate\"><span class=\"pre\">value()</span></code> を呼び出してフィールド名を渡す場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">foo</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">foo_id</span></code> のどちらを渡しても、同じものが返ってきます（辞書のキーは渡したフィールド名と一致します）。</p>\n<p>例:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [{&#39;blog_id&#39;: 1, &#39;headline&#39;: &#39;First Entry&#39;, ...}, ...]&gt;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"s2\">&quot;blog&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [{&#39;blog&#39;: 1}, ...]&gt;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"s2\">&quot;blog_id&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [{&#39;blog_id&#39;: 1}, ...]&gt;</span>\n</code></pre></div>\n</li>\n<li><p>When using <code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code> together with <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.distinct\" title=\"django.db.models.query.QuerySet.distinct\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">distinct()</span></code></a>, be aware that\nordering can affect the results. See the note in <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.distinct\" title=\"django.db.models.query.QuerySet.distinct\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">distinct()</span></code></a> for\ndetails.</p></li>\n<li><p>If you use a <code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code> clause after an <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.extra\" title=\"django.db.models.query.QuerySet.extra\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">extra()</span></code></a> call,\nany fields defined by a <code class=\"docutils literal notranslate\"><span class=\"pre\">select</span></code> argument in the <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.extra\" title=\"django.db.models.query.QuerySet.extra\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">extra()</span></code></a> must\nbe explicitly included in the <code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code> call. Any <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.extra\" title=\"django.db.models.query.QuerySet.extra\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">extra()</span></code></a> call\nmade after a <code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code> call will have its extra selected fields\nignored.</p></li>\n<li><p>Calling <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.only\" title=\"django.db.models.query.QuerySet.only\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">only()</span></code></a> and <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.defer\" title=\"django.db.models.query.QuerySet.defer\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">defer()</span></code></a> after <code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code> doesn't make\nsense, so doing so will raise a <code class=\"docutils literal notranslate\"><span class=\"pre\">TypeError</span></code>.</p></li>\n<li><p>トランスフォームと集計の処理を組み合わせるには、2つの <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.annotate\" title=\"django.db.models.query.QuerySet.annotate\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">annotate()</span></code></a>  呼び出しを、明示的にまたは <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.values\" title=\"django.db.models.query.QuerySet.values\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">values()</span></code></a> へのキーワード引数として使用する必要があります。上記の例のように、リレーション先のフィールドタイプにトランスフォームが登録されていれば、最初の <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.annotate\" title=\"django.db.models.query.QuerySet.annotate\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">annotate()</span></code></a> は省略できます。よって以下の例はすべて等価です:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">CharField</span><span class=\"p\">,</span> <span class=\"n\">Count</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models.functions</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Lower</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">CharField</span><span class=\"o\">.</span><span class=\"n\">register_lookup</span><span class=\"p\">(</span><span class=\"n\">Lower</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"s2\">&quot;entry__authors__name__lower&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">entries</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;entry&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">&lt;QuerySet [{&#39;entry__authors__name__lower&#39;: &#39;test author&#39;, &#39;entries&#39;: 33}]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"n\">entry__authors__name__lower</span><span class=\"o\">=</span><span class=\"n\">Lower</span><span class=\"p\">(</span><span class=\"s2\">&quot;entry__authors__name&quot;</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">entries</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;entry&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [{&#39;entry__authors__name__lower&#39;: &#39;test author&#39;, &#39;entries&#39;: 33}]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">entry__authors__name__lower</span><span class=\"o\">=</span><span class=\"n\">Lower</span><span class=\"p\">(</span><span class=\"s2\">&quot;entry__authors__name&quot;</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;entry__authors__name__lower&quot;</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">entries</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;entry&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">&lt;QuerySet [{&#39;entry__authors__name__lower&#39;: &#39;test author&#39;, &#39;entries&#39;: 33}]&gt;</span>\n</code></pre></div>\n</li>\n</ul>\n<p>これは、値が欲しい利用可能フィールドが少なく、モデルインスタンスオブジェクトの機能が必要ないことが分かっている場合に便利です。使用する必要のあるフィールドだけを選択する方がより効率的です。</p>\n<p>最後に、<code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code> の後に <code class=\"docutils literal notranslate\"><span class=\"pre\">filter()</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">order_by()</span></code> などを呼び出すことができますが、これはこの2つの呼び出しが同じであることを意味しています:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Django を作った人たちは、SQL に影響するメソッドを最初に置き、その後に出力に影響するメソッド (<code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code> など) を (オプションで) 置くことを好みますが、それは本当に重要ではありません。しかし、そんなことはどうでもいいのです。この機会に、あなたの個性を存分に発揮してください。</p>\n<p>リレーション先モデルのフィールドには、 <code class=\"docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></code> 、 <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> 、 <code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code> 属性を使用して逆リレーションで参照することもできます。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;entry__headline&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [{&#39;name&#39;: &#39;My blog&#39;, &#39;entry__headline&#39;: &#39;An entry&#39;},</span>\n<span class=\"go\">     {&#39;name&#39;: &#39;My blog&#39;, &#39;entry__headline&#39;: &#39;Another entry&#39;}, ...]&gt;</span>\n</code></pre></div>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p><a class=\"reference internal\" href=\"/ja/6.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a> 属性と逆リレーションは複数の関連行を持つので、これらを含めると結果のサイズが数倍になることがあります。これは、 <code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code> クエリに複数のフィールドを含めると特に顕著で、その場合、考えられるすべての組み合わせが返されることになります。</p>\n</aside>\n<aside class=\"admonition-special-values-for-jsonfield-on-sqlite admonition\">\n<p class=\"admonition-title\">SQLiteにおける <code class=\"docutils literal notranslate\"><span class=\"pre\">JSONField</span></code> の特殊な値</p>\n<p>SQLiteでは、 <code class=\"docutils literal notranslate\"><span class=\"pre\">JSON_EXTRACT</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">JSON_TYPE</span></code> は実装されていますが、 <code class=\"docutils literal notranslate\"><span class=\"pre\">BOOLEAN</span></code> データ型がないため、 <code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code> は <a class=\"reference internal\" href=\"/ja/6.0/ref/models/fields/#django.db.models.JSONField\" title=\"django.db.models.JSONField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">JSONField</span></code></a> のキーを変換する際に <code class=\"docutils literal notranslate\"><span class=\"pre\">true</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> の代わりに <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;true&quot;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;false&quot;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;null&quot;</span></code> の代わりに <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> を返します。</p>\n</aside>\n<aside class=\"version-note version-changed\" data-version=\"5.2\">\n<p class=\"version-note-title\">Changed in Django 5.2</p><p><code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code> を使用して <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span></code> 句が生成される際に、指定された <code class=\"docutils literal notranslate\"><span class=\"pre\">*fields</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">**expressions</span></code> の順序を尊重するように更新されました。</p>\n</aside>\n</section>\n<section id=\"values-list\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">values_list()</span></code><a class=\"heading-anchor\" href=\"#values-list\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.values_list\">\n<span class=\"sig-name descname\"><span class=\"pre\">values_list</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">fields</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">flat</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">named</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.values_list\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>この関数は <code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code> と似ていますが、イテレートしたときに辞書の代わりにタプルを返します。それぞれのタプルには、 <code class=\"docutils literal notranslate\"><span class=\"pre\">values_list()</span></code> に渡された各フィールドまたは式の値が、渡された順番で含まれます。例えば:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values_list</span><span class=\"p\">(</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [(1, &#39;First entry&#39;), ...]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models.functions</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Lower</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values_list</span><span class=\"p\">(</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">,</span> <span class=\"n\">Lower</span><span class=\"p\">(</span><span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">&lt;QuerySet [(1, &#39;first entry&#39;), ...]&gt;</span>\n</code></pre></div>\n<p>フィールドを1つだけ渡す場合は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">flat</span></code> パラメータを渡すことができます。これに <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を渡すと、返り値はタプルではなく単一の値になります。この違いは例を見て理解してください。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values_list</span><span class=\"p\">(</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet[(1,), (2,), (3,), ...]&gt;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values_list</span><span class=\"p\">(</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">,</span> <span class=\"n\">flat</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [1, 2, 3, ...]&gt;</span>\n</code></pre></div>\n<p>複数のフィールドがある場合に <code class=\"docutils literal notranslate\"><span class=\"pre\">flat</span></code> を渡すとエラーになります。</p>\n<p><a class=\"reference external\" href=\"https://docs.python.org/3/library/collections.html#collections.namedtuple\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">namedtuple()</span></code></a>: として結果を得るには、<code class=\"docutils literal notranslate\"><span class=\"pre\">named=True</span></code> を渡します:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values_list</span><span class=\"p\">(</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">,</span> <span class=\"n\">named</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [Row(id=1, headline=&#39;First entry&#39;), ...]&gt;</span>\n</code></pre></div>\n<p>名前付きタプルを使用することで、名前付きタプルに変換するためのわずかなパフォーマンスの低下を犠牲にして、クエリの実行結果の可読性を高めることができます。</p>\n<p>もし <code class=\"docutils literal notranslate\"><span class=\"pre\">values_list()</span></code> に何も値を渡さなければ、モデル内のすべてのフィールドを宣言された順に返します。</p>\n<p>よくあるニーズは、特定のモデルインスタンスの特定のフィールドの値を取得することです。これを実現するには、 <code class=\"docutils literal notranslate\"><span class=\"pre\">values_list()</span></code> の後に <code class=\"docutils literal notranslate\"><span class=\"pre\">get()</span></code> を呼び出します:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values_list</span><span class=\"p\">(</span><span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">,</span> <span class=\"n\">flat</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;First entry&#39;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">values_list()</span></code> はいずれも、モデルインスタンスを作成するオーバーヘッドなしにデータのサブセットを取得するという、特定のユースケースに対する最適化を意図したものです。このメタファーは、多対多の関係やその他の多値の関係（逆引き外部キーの1対多の関係など）を扱うときには、「1行に1オブジェクト」の前提が成り立たないために崩れてしまいます。</p>\n<p>例えば、 <a class=\"reference internal\" href=\"/ja/6.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a>: を通してクエリを実行したときの挙動に注目してみましょう:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values_list</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;entry__headline&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [(&#39;Noam Chomsky&#39;, &#39;Impressions of Gaza&#39;),</span>\n<span class=\"go\"> (&#39;George Orwell&#39;, &#39;Why Socialists Do Not Believe in Fun&#39;),</span>\n<span class=\"go\"> (&#39;George Orwell&#39;, &#39;In Defence of English Cooking&#39;),</span>\n<span class=\"go\"> (&#39;Don Quixote&#39;, None)]&gt;</span>\n</code></pre></div>\n<p>複数のエントリを持つ著者は複数回表示され、エントリのない著者のエントリとして <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> と表示されます。</p>\n<p>同様に、外部キーを逆引きするクエリでは、著者が設定されていないエントリに対して <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> が表示されます。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values_list</span><span class=\"p\">(</span><span class=\"s2\">&quot;authors&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [(&#39;Noam Chomsky&#39;,), (&#39;George Orwell&#39;,), (None,)]&gt;</span>\n</code></pre></div>\n<aside class=\"admonition-special-values-for-jsonfield-on-sqlite admonition\">\n<p class=\"admonition-title\">SQLiteにおける <code class=\"docutils literal notranslate\"><span class=\"pre\">JSONField</span></code> の特殊な値</p>\n<p>SQLiteでは、 <code class=\"docutils literal notranslate\"><span class=\"pre\">JSON_EXTRACT</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">JSON_TYPE</span></code> は実装されていますが、 <code class=\"docutils literal notranslate\"><span class=\"pre\">BOOLEAN</span></code> データ型がないため、 <code class=\"docutils literal notranslate\"><span class=\"pre\">values_list()</span></code> は <a class=\"reference internal\" href=\"/ja/6.0/ref/models/fields/#django.db.models.JSONField\" title=\"django.db.models.JSONField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">JSONField</span></code></a> のキーを変換する際に <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;true&quot;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;false&quot;</span></code>, and <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;null&quot;</span></code> の代わりに <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> の文字列を返します。</p>\n</aside>\n<aside class=\"version-note version-changed\" data-version=\"5.2\">\n<p class=\"version-note-title\">Changed in Django 5.2</p><p><code class=\"docutils literal notranslate\"><span class=\"pre\">values_list()</span></code> を使用して <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span></code> 句が生成される際に、指定された <code class=\"docutils literal notranslate\"><span class=\"pre\">*fields</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">**expressions</span></code> の順序を尊重するように更新されました。</p>\n</aside>\n</section>\n<section id=\"dates\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">dates()</span></code><a class=\"heading-anchor\" href=\"#dates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.dates\">\n<span class=\"sig-name descname\"><span class=\"pre\">dates</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">field</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">kind</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">order</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'ASC'</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.dates\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>この <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> は <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.date\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime.date</span></code></a> オブジェクトのリストとして評価され、<code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> の内容から指定された種類の日付を返します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">field</span></code> にはモデルの <code class=\"docutils literal notranslate\"><span class=\"pre\">DateField</span></code> の名前を指定します。 <code class=\"docutils literal notranslate\"><span class=\"pre\">kind</span></code> には <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;year&quot;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;month&quot;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;week&quot;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;day&quot;</span></code> のいずれかを指定します。結果のリストに含まれる <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.date\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime.date</span></code></a> オブジェクトは、指定された <code class=\"docutils literal notranslate\"><span class=\"pre\">type</span></code> に &quot;切り捨て&quot; られます。</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;year&quot;</span></code> は、そのフィールドのすべての年の値のリストを重複なしで返します。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;month&quot;</span></code> はそのフィールドの年/月の値のリストを重複なしで返します。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;week&quot;</span></code> はそのフィールドの年/週の値のリストを重複なしで返します。すべての date は月曜日になります。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;day&quot;</span></code> はそのフィールドの年/月/日の値のリストを重複なしで返します。</p></li>\n</ul>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">order</span></code> のデフォルトは <code class=\"docutils literal notranslate\"><span class=\"pre\">'ASC'</span></code> で、 <code class=\"docutils literal notranslate\"><span class=\"pre\">'ASC'</span></code> または <code class=\"docutils literal notranslate\"><span class=\"pre\">'DESC'</span></code> のいずれかを指定します。これは結果のソート方法を指定します。</p>\n<p>例:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">dates</span><span class=\"p\">(</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;year&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">[datetime.date(2005, 1, 1)]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">dates</span><span class=\"p\">(</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;month&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">[datetime.date(2005, 2, 1), datetime.date(2005, 3, 1)]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">dates</span><span class=\"p\">(</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;week&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">[datetime.date(2005, 2, 14), datetime.date(2005, 3, 14)]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">dates</span><span class=\"p\">(</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;day&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">[datetime.date(2005, 2, 20), datetime.date(2005, 3, 20)]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">dates</span><span class=\"p\">(</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;day&quot;</span><span class=\"p\">,</span> <span class=\"n\">order</span><span class=\"o\">=</span><span class=\"s2\">&quot;DESC&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">[datetime.date(2005, 3, 20), datetime.date(2005, 2, 20)]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">headline__contains</span><span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">dates</span><span class=\"p\">(</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;day&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">[datetime.date(2005, 3, 20)]</span>\n</code></pre></div>\n</section>\n<section id=\"datetimes\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">datetimes()</span></code><a class=\"heading-anchor\" href=\"#datetimes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.datetimes\">\n<span class=\"sig-name descname\"><span class=\"pre\">datetimes</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">field_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">kind</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">order</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'ASC'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">tzinfo</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.datetimes\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>これは、<code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> 内の指定した種類の有効な日付を表す <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime.datetime</span></code></a> オブジェクトのリストとして評価される <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> を返します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">field_name</span></code> にはモデルの <code class=\"docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></code> の名前を指定します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">kind</span></code> には <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;year&quot;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;month&quot;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;week&quot;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;day&quot;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;hour&quot;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;minute&quot;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;second&quot;</span></code> のいずれかを指定します。結果のリストに含まれる <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime.datetime</span></code></a> オブジェクトは、指定された <code class=\"docutils literal notranslate\"><span class=\"pre\">type</span></code> に &quot; 切り捨て&quot; られます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">order</span></code> のデフォルトは <code class=\"docutils literal notranslate\"><span class=\"pre\">'ASC'</span></code> で、 <code class=\"docutils literal notranslate\"><span class=\"pre\">'ASC'</span></code> または <code class=\"docutils literal notranslate\"><span class=\"pre\">'DESC'</span></code> のいずれかを指定します。これは結果のソート方法を指定します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">tzinfo</span></code> は、日時が切り捨てられる前に変換されるタイムゾーンを定義します。実際、与えられた日時は使用されるタイムゾーンによって異なる表現を持ちます。このパラメータは <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.tzinfo\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime.tzinfo</span></code></a> オブジェクトでなければなりません。<code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> の場合、Djangoは <a class=\"reference internal\" href=\"/ja/6.0/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">カレントタイムゾーン</span></a> を使用します。<a class=\"reference internal\" href=\"/ja/6.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> の場合には効果がありません。</p>\n<aside class=\"admonition admonition-note\" id=\"database-time-zone-definitions\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>この関数はデータベース内で直接タイムゾーンの変換を行います。そのため、データベースは <code class=\"docutils literal notranslate\"><span class=\"pre\">tzinfo.tzname(None)</span></code> の値を解釈できなければなりません。これは以下の要件になります:</p>\n<ul class=\"simple\">\n<li><p>SQLite: 要件はありません。変換はPythonで行われます。</p></li>\n<li><p>PostgreSQL: 要件はありません（ <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/datatype-datetime.html#DATATYPE-TIMEZONES\">Time Zones</a> を参照）。</p></li>\n<li><p>Oracle: 要件はありません（ <a class=\"reference external\" href=\"https://docs.oracle.com/en/database/oracle/oracle-database/18/nlspg/datetime-data-types-and-time-zone-support.html#GUID-805AB986-DE12-4FEA-AF56-5AABCD2132DF\">Choosing a Time Zone File</a> を参照）。</p></li>\n<li><p>MySQL: <a class=\"reference external\" href=\"https://dev.mysql.com/doc/refman/en/mysql-tzinfo-to-sql.html\">mysql_tzinfo_to_sql</a> でタイムゾーンテーブルをロードすること。</p></li>\n</ul>\n</aside>\n</section>\n<section id=\"none\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">none()</span></code><a class=\"heading-anchor\" href=\"#none\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.none\">\n<span class=\"sig-name descname\"><span class=\"pre\">none</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.none\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">none()</span></code> を呼び出すと、オブジェクトを返さないクエリセットが作成され、結果にアクセスする際にクエリが実行されることはありません。 <code class=\"docutils literal notranslate\"><span class=\"pre\">qs.none()</span></code> のクエリセットは <code class=\"docutils literal notranslate\"><span class=\"pre\">EmptyQuerySet</span></code> のインスタンスです。</p>\n<p>例:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">none</span><span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet []&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models.query</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">EmptyQuerySet</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">none</span><span class=\"p\">(),</span> <span class=\"n\">EmptyQuerySet</span><span class=\"p\">)</span>\n<span class=\"go\">True</span>\n</code></pre></div>\n</section>\n<section id=\"all\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">all()</span></code><a class=\"heading-anchor\" href=\"#all\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.all\">\n<span class=\"sig-name descname\"><span class=\"pre\">all</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.all\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Returns a <em>copy</em> of the current <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> (or <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> subclass). This\ncan be useful in situations where you might want to pass in either a model\nmanager or a <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> and do further filtering on the result. After calling\n<code class=\"docutils literal notranslate\"><span class=\"pre\">all()</span></code> on either object, you'll definitely have a <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> to work with.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> が <a class=\"reference internal\" href=\"#when-querysets-are-evaluated\"><span class=\"std std-ref\">評価される</span></a> とき、通常その結果はキャッシュされます。もし <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> が評価された後にデータベースのデータが更新された場合、以前に評価された  <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> に対して <code class=\"docutils literal notranslate\"><span class=\"pre\">all()</span></code> を呼び出すことで、同じクエリの最新の結果を取得できます。</p>\n</section>\n<section id=\"union\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">union()</span></code><a class=\"heading-anchor\" href=\"#union\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.union\">\n<span class=\"sig-name descname\"><span class=\"pre\">union</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">other_qs</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">all</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.union\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>SQLの <code class=\"docutils literal notranslate\"><span class=\"pre\">UNION</span></code> コマンドを使用して、2つ以上の <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> の結果を結合します。例えば:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">qs1</span><span class=\"o\">.</span><span class=\"n\">union</span><span class=\"p\">(</span><span class=\"n\">qs2</span><span class=\"p\">,</span> <span class=\"n\">qs3</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">UNION</span></code> 演算子は、デフォルトでは明確な値のみを選択します。重複した値を取得するには、 <code class=\"docutils literal notranslate\"><span class=\"pre\">all=True</span></code> 引数を使用します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">union()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">intersection()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">difference()</span></code> は、引数が他のモデルの <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> であっても、最初の <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> の型のモデルインスタンスを返します。すべての <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> で <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span></code> リストが同じであれば、異なるモデルを渡すことができます（少なくとも型と、型の順番が同じであれば名前は関係ありません）。 このような場合、結果の <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> に適用される <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> メソッドでは、最初の <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> のカラム名を使用する必要があります。たとえば、次のようになります:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">qs1</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values_list</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">qs2</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values_list</span><span class=\"p\">(</span><span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">qs1</span><span class=\"o\">.</span><span class=\"n\">union</span><span class=\"p\">(</span><span class=\"n\">qs2</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>In addition, only <code class=\"docutils literal notranslate\"><span class=\"pre\">LIMIT</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">OFFSET</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">COUNT(*)</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">ORDER</span> <span class=\"pre\">BY</span></code>, and\nspecifying columns (i.e. slicing, <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.count\" title=\"django.db.models.query.QuerySet.count\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">count()</span></code></a>, <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.exists\" title=\"django.db.models.query.QuerySet.exists\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">exists()</span></code></a>,\n<a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.order_by\" title=\"django.db.models.query.QuerySet.order_by\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">order_by()</span></code></a>, and <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.values\" title=\"django.db.models.query.QuerySet.values\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">values()</span></code></a>/<a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.values_list\" title=\"django.db.models.query.QuerySet.values_list\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">values_list()</span></code></a>) are allowed\non the resulting <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>. Further, databases place restrictions on\nwhat operations are allowed in the combined queries. For example, most\ndatabases don't allow <code class=\"docutils literal notranslate\"><span class=\"pre\">LIMIT</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">OFFSET</span></code> in the combined queries.</p>\n</section>\n<section id=\"intersection\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">intersection()</span></code><a class=\"heading-anchor\" href=\"#intersection\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.intersection\">\n<span class=\"sig-name descname\"><span class=\"pre\">intersection</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">other_qs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.intersection\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>SQL の <code class=\"docutils literal notranslate\"><span class=\"pre\">INTERSECT</span></code> 演算子を使用して、2つ以上の <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> の全てに含まれる共有要素を返します。例:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">qs1</span><span class=\"o\">.</span><span class=\"n\">intersection</span><span class=\"p\">(</span><span class=\"n\">qs2</span><span class=\"p\">,</span> <span class=\"n\">qs3</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>制限については <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.union\" title=\"django.db.models.query.QuerySet.union\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">union()</span></code></a> を参照してください。</p>\n</section>\n<section id=\"difference\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">difference()</span></code><a class=\"heading-anchor\" href=\"#difference\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.difference\">\n<span class=\"sig-name descname\"><span class=\"pre\">difference</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">other_qs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.difference\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>SQL の <code class=\"docutils literal notranslate\"><span class=\"pre\">EXCEPT</span></code> 演算子を使用して、 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> には存在するが、他の <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> には存在しない要素のみを保持します。例:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">qs1</span><span class=\"o\">.</span><span class=\"n\">difference</span><span class=\"p\">(</span><span class=\"n\">qs2</span><span class=\"p\">,</span> <span class=\"n\">qs3</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>制限については <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.union\" title=\"django.db.models.query.QuerySet.union\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">union()</span></code></a> を参照してください。</p>\n</section>\n<section id=\"select-related\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">select_related()</span></code><a class=\"heading-anchor\" href=\"#select-related\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.select_related\">\n<span class=\"sig-name descname\"><span class=\"pre\">select_related</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">fields</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.select_related\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>クエリを実行する際に、追加で関連オブジェクトのデータを選択し、外部キーのリレーションシップを &quot;辿る&quot; <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> を返します。発行されるクエリはより複雑になりますが、後で外部リレーションシップを使用する際に追加のデータベースクエリが不要になるので、パフォーマンスを向上させることができます。</p>\n<p>以下の例は、通常のルックアップと <code class=\"docutils literal notranslate\"><span class=\"pre\">select_related()</span></code> を用いたルックアップの違いを示しています。まず、これが通常のルックアップです。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Hits the database.</span>\n<span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># Hits the database again to get the related Blog object.</span>\n<span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">blog</span>\n</code></pre></div>\n<p>そしてこれが <code class=\"docutils literal notranslate\"><span class=\"pre\">select_related</span></code> を用いたルックアップです。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Hits the database.</span>\n<span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">select_related</span><span class=\"p\">(</span><span class=\"s2\">&quot;blog&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># Doesn&#39;t hit the database, because e.blog has been prepopulated</span>\n<span class=\"c1\"># in the previous query.</span>\n<span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">blog</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">select_related()</span></code> はどんなオブジェクトのクエリセットにも使うことができます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">timezone</span>\n\n<span class=\"c1\"># Find all the blogs with entries scheduled to be published in the future.</span>\n<span class=\"n\">blogs</span> <span class=\"o\">=</span> <span class=\"nb\">set</span><span class=\"p\">()</span>\n\n<span class=\"k\">for</span> <span class=\"n\">e</span> <span class=\"ow\">in</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__gt</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">())</span><span class=\"o\">.</span><span class=\"n\">select_related</span><span class=\"p\">(</span><span class=\"s2\">&quot;blog&quot;</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Without select_related(), this would make a database query for each</span>\n    <span class=\"c1\"># loop iteration in order to fetch the related blog for each entry.</span>\n    <span class=\"n\">blogs</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">blog</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">filter()</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">select_related()</span></code> を連続させるときの順序は重要ではありません。これらのクエリセットは等価です:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__gt</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">())</span><span class=\"o\">.</span><span class=\"n\">select_related</span><span class=\"p\">(</span><span class=\"s2\">&quot;blog&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">select_related</span><span class=\"p\">(</span><span class=\"s2\">&quot;blog&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__gt</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">())</span>\n</code></pre></div>\n<p>外部キーのクエリと同様の方法で、外部キーをたどることができます。次のようなモデルがあるとします:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">City</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"k\">pass</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"n\">hometown</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n        <span class=\"n\">City</span><span class=\"p\">,</span>\n        <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SET_NULL</span><span class=\"p\">,</span>\n        <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Book</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Person</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Then a call to <code class=\"docutils literal notranslate\"><span class=\"pre\">Book.objects.select_related('author__hometown').get(id=4)</span></code>\nwill cache the related <code class=\"docutils literal notranslate\"><span class=\"pre\">Person</span></code> <em>and</em> the related <code class=\"docutils literal notranslate\"><span class=\"pre\">City</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Hits the database with joins to the author and hometown tables.</span>\n<span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">select_related</span><span class=\"p\">(</span><span class=\"s2\">&quot;author__hometown&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n<span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">author</span>  <span class=\"c1\"># Doesn&#39;t hit the database.</span>\n<span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">hometown</span>  <span class=\"c1\"># Doesn&#39;t hit the database.</span>\n\n<span class=\"c1\"># Without select_related()...</span>\n<span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span>  <span class=\"c1\"># Hits the database.</span>\n<span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">author</span>  <span class=\"c1\"># Hits the database.</span>\n<span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">hometown</span>  <span class=\"c1\"># Hits the database.</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">select_related()</span></code> にフィールドのリストを渡すことで、任意の <a class=\"reference internal\" href=\"/ja/6.0/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> または <a class=\"reference internal\" href=\"/ja/6.0/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></code></a> リレーションを参照できます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">select_related</span></code> に渡すフィールドのリストには、 <a class=\"reference internal\" href=\"/ja/6.0/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></code></a> の逆方向の参照を含めることもできます。つまり、 <a class=\"reference internal\" href=\"/ja/6.0/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></code></a> を辿って、フィールドが定義されているオブジェクトに戻ることができます。このとき、フィールド名を指定する代わりに、 <a class=\"reference internal\" href=\"/ja/6.0/ref/models/fields/#django.db.models.ForeignKey.related_name\" title=\"django.db.models.ForeignKey.related_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">related_name</span></code></a> を関連オブジェクトのフィールドに使用してください。</p>\n<p>多くの関連オブジェクトを含む <code class=\"docutils literal notranslate\"><span class=\"pre\">select_related()</span></code> を呼び出したい場合や、すべての関連オブジェク トを把握していないケースもあるでしょう。このようなときは、引数なしで <code class=\"docutils literal notranslate\"><span class=\"pre\">select_related()</span></code> を呼び出すこともできます。この場合、NULLでない外部キーはすべて追いかけることになります。ただし、NULL可能な外部キーは明示的に指定する必要があります。クエリが複雑になり、実際に必要とされるよりも多くのデータを返す可能性があるため、ほとんどの場合、この方法は推奨されません。</p>\n<p>過去に <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> で <code class=\"docutils literal notranslate\"><span class=\"pre\">select_related</span></code> を呼び出したときに追加した関連フィールドのリストを消去したい場合は、パラメータとして <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> を渡すことができます:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">without_relations</span> <span class=\"o\">=</span> <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">select_related</span><span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">select_related</span></code> の呼び出しを連鎖させると、他のメソッドと同様に機能します。すなわち、 <code class=\"docutils literal notranslate\"><span class=\"pre\">select_related('foo',</span> <span class=\"pre\">'bar')</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">select_related('foo').select_related('bar')</span></code> と等価です。</p>\n</section>\n<section id=\"prefetch-related\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">prefetch_related()</span></code><a class=\"heading-anchor\" href=\"#prefetch-related\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.prefetch_related\">\n<span class=\"sig-name descname\"><span class=\"pre\">prefetch_related</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">lookups</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.prefetch_related\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>指定のルックアップに対してそれぞれのリレーション先のオブジェクトを一括で自動的に取得する <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> を返します。</p>\n<p>目的は <code class=\"docutils literal notranslate\"><span class=\"pre\">select_related</span></code> と似ていて、関連オブジェクトにアクセスすることで多量のデータベースクエリが発生してしまうのを防ぐために作られていますが、その手段が異なります。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">select_related</span></code> はSQLで結合操作を行い、関連オブジェクトのフィールドを <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span></code> 文に含めることで動作します。そのため、 <code class=\"docutils literal notranslate\"><span class=\"pre\">select_related</span></code> は関連オブジェクトを同一のデータベースクエリで取得します。ただし、 '大量の' のリレーションを結合することで、膨大な結果になってしまうのを避けるため、 <code class=\"docutils literal notranslate\"><span class=\"pre\">select_related</span></code> を適用できるのは単一値のリレーション、つまり外部キーと一対一の関係に制限されています。</p>\n<p>一方、 <code class=\"docutils literal notranslate\"><span class=\"pre\">prefetch_related</span></code> はリレーションごとに個別のルックアップを行い、Pythonで「結合」を行います。これにより、 <code class=\"docutils literal notranslate\"><span class=\"pre\">select_related</span></code> でサポートされている外部キーと一対一のリレーションに加えて、 <code class=\"docutils literal notranslate\"><span class=\"pre\">select_related</span></code> ではできない多対多、多対一、および <a class=\"reference internal\" href=\"/ja/6.0/ref/contrib/contenttypes/#django.contrib.contenttypes.fields.GenericRelation\" title=\"django.contrib.contenttypes.fields.GenericRelation\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">GenericRelation</span></code></a> オブジェクトの事前読み込みが可能になります。 <a class=\"reference internal\" href=\"/ja/6.0/ref/contrib/contenttypes/#django.contrib.contenttypes.fields.GenericForeignKey\" title=\"django.contrib.contenttypes.fields.GenericForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">GenericForeignKey</span></code></a> の事前読み込みもサポートしていますが、各 <code class=\"docutils literal notranslate\"><span class=\"pre\">ContentType</span></code> のクエリセットを <a class=\"reference internal\" href=\"/ja/6.0/ref/contrib/contenttypes/#django.contrib.contenttypes.prefetch.GenericPrefetch\" title=\"django.contrib.contenttypes.prefetch.GenericPrefetch\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">GenericPrefetch</span></code></a> の <code class=\"docutils literal notranslate\"><span class=\"pre\">querysets</span></code> パラメータで指定する必要があります。</p>\n<p>例えば、以下のようなモデルがあると考えます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Topping</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Pizza</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    <span class=\"n\">toppings</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"n\">Topping</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\"> (</span><span class=\"si\">%s</span><span class=\"s2\">)&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;, &quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">topping</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"k\">for</span> <span class=\"n\">topping</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">toppings</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()),</span>\n        <span class=\"p\">)</span>\n</code></pre></div>\n<p>そしてこれを実行します:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Pizza</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Pizza: Hawaiian (ham, pineapple)&gt;, &lt;Pizza: Seafood (prawns, smoked salmon)&gt;, ...]&gt;</span>\n</code></pre></div>\n<p>問題は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">Pizza.__str__()</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">self.toppings.all()</span></code> を要求するたびにデータベースにクエリを送信する必要があることです。これにより、 <code class=\"docutils literal notranslate\"><span class=\"pre\">Pizza.objects.all()</span></code> では Pizza <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> の <strong>すべての</strong> アイテムに対して Toppings テーブルでのクエリを実行することになります。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">prefetch_related</span></code> を使えば、クエリをたった2つに削減できます。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Pizza</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"s2\">&quot;toppings&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>上記は、それぞれの <code class=\"docutils literal notranslate\"><span class=\"pre\">Pizza</span></code> に対する <code class=\"docutils literal notranslate\"><span class=\"pre\">self.toppings.all()</span></code> を意味しています。これにより、 <code class=\"docutils literal notranslate\"><span class=\"pre\">self.toppings.all()</span></code> が呼び出されるたびにデータベースにアイテムを取得しに行くのではなく、単一のクエリで事前に読み込まれた <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> のキャッシュを利用するようになります。</p>\n<p>つまり、関連するトッピングはすべて単一のクエリで取得され、関連する結果があらかじめキャッシュされた <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> インスタンスの作成に使用されます。これらはその後、 <code class=\"docutils literal notranslate\"><span class=\"pre\">self.toppings.all()</span></code> の呼び出しで使用されます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">prefetch_related()</span></code> の追加クエリは、 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> の評価が開始され、主クエリが実行された後に実行されます。</p>\n<p>主クエリが実行されてから追加クエリが実行されるまでの間に、別のデータベースクエリによってアイテムが変更されるのを防ぐ仕組みがないため、矛盾した結果が出力される可能性に留意してください。例えば、主クエリが実行された後に <code class=\"docutils literal notranslate\"><span class=\"pre\">Pizza</span></code> が削除された場合、追加クエリではトッピングが返されず、ピザにトッピングがないように見えます。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Pizza</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"s2\">&quot;toppings&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">#  &quot;Hawaiian&quot; Pizza was deleted in another shell.</span>\n<span class=\"go\">&lt;QuerySet [&lt;Pizza: Hawaiian ()&gt;, &lt;Pizza: Seafood (prawns, smoked salmon)&gt;]&gt;</span>\n</code></pre></div>\n<p>モデルインスタンスのイテラブルを保持する場合は、 <a class=\"reference internal\" href=\"#django.db.models.prefetch_related_objects\" title=\"django.db.models.prefetch_related_objects\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">prefetch_related_objects()</span></code></a> 関数を使ってこれらインスタンスに関連する属性を事前読み込みしておくことができます。</p>\n<p>このとき、主たる <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> の結果キャッシュと、指定されたすべての関連オブジェクトは、メモリに完全に読み込まれる点に注意してください。これは <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> の典型的な挙動を変更するもので、<code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> は通常、データベースでクエリが実行された後であっても、必要になるまで全オブジェクトをメモリに読み込まないように動作します。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> オブジェクトでは、以後に連鎖させるメソッドのうち別のデータベースクエリを伴うものは、以前にキャッシュされた結果を無視し、新たなデータベースクエリでデータを取得します。したがって、次のように記述した場合、</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">pizzas</span> <span class=\"o\">=</span> <span class=\"n\">Pizza</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"s2\">&quot;toppings&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"p\">[</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">pizza</span><span class=\"o\">.</span><span class=\"n\">toppings</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">spicy</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">))</span> <span class=\"k\">for</span> <span class=\"n\">pizza</span> <span class=\"ow\">in</span> <span class=\"n\">pizzas</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>... <code class=\"docutils literal notranslate\"><span class=\"pre\">pizza.toppings.all()</span></code> で事前読み込みしたことが役に立ちません。 <code class=\"docutils literal notranslate\"><span class=\"pre\">prefetch_related('toppings')</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">pizza.toppings.all()</span></code> を意味しますが、 <code class=\"docutils literal notranslate\"><span class=\"pre\">pizza.toppings.filter()</span></code> は別の新しいクエリを発行しており、事前に読み込まれたキャッシュは利用されません。それどころか、不要なデータベースクエリを実行したことで、パフォーマンスが低下します。ですから、この機能は注意深く利用してください！</p>\n<p>また <a class=\"reference internal\" href=\"/ja/6.0/ref/models/relations/#django.db.models.fields.related.RelatedManager\" title=\"django.db.models.fields.related.RelatedManager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">関係マネージャ</span></code></a> の上で、 <a class=\"reference internal\" href=\"/ja/6.0/ref/models/relations/#django.db.models.fields.related.RelatedManager.add\" title=\"django.db.models.fields.related.RelatedManager.add\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">add()</span></code></a>, <a class=\"reference internal\" href=\"/ja/6.0/ref/models/relations/#django.db.models.fields.related.RelatedManager.create\" title=\"django.db.models.fields.related.RelatedManager.create\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">create()</span></code></a>, <a class=\"reference internal\" href=\"/ja/6.0/ref/models/relations/#django.db.models.fields.related.RelatedManager.remove\" title=\"django.db.models.fields.related.RelatedManager.remove\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">remove()</span></code></a>, <a class=\"reference internal\" href=\"/ja/6.0/ref/models/relations/#django.db.models.fields.related.RelatedManager.clear\" title=\"django.db.models.fields.related.RelatedManager.clear\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">clear()</span></code></a> または <a class=\"reference internal\" href=\"/ja/6.0/ref/models/relations/#django.db.models.fields.related.RelatedManager.set\" title=\"django.db.models.fields.related.RelatedManager.set\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">set()</span></code></a> を呼び出すと、そのリレーションのために事前にフェッチされたキャッシュがクリアされます。</p>\n</aside>\n<p>通常の結合構文を使って、リレーション先のフィールドのさらにリレーション先のフィールドも参照できます。上記の例に以下のモデルを追加したとして考えましょう:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Restaurant</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">pizzas</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"n\">Pizza</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;restaurants&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">best_pizza</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n        <span class=\"n\">Pizza</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;championed_by&quot;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n<p>以下は適切です:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Restaurant</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"s2\">&quot;pizzas__toppings&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これはレストランに所属するすべてのピザと、これらのピザに所属するすべてのトッピングを事前読み込みします。これにより、3 つのデータベースクエリが発行されます - 一つはレストランのため、一つはピザのため、そしてもう一つはトッピングのためです。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Restaurant</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"s2\">&quot;best_pizza__toppings&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これは、各レストランのベストピザとベストピザのトッピングすべてを取得します。これは3つのデータベースクエリで行われます。1つはレストラン、1つは &quot;ベストピザ&quot; 、1つはトッピングです。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">best_pizza</span></code> のリレーションシップも <code class=\"docutils literal notranslate\"><span class=\"pre\">select_related</span></code> を使って取得することで、クエリを2回に減らすことができます:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Restaurant</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">select_related</span><span class=\"p\">(</span><span class=\"s2\">&quot;best_pizza&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"s2\">&quot;best_pizza__toppings&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>事前読み込みはメインクエリ ( <code class=\"docutils literal notranslate\"><span class=\"pre\">select_related</span></code> が必要とする結合を含む) の後に実行されるので、 <code class=\"docutils literal notranslate\"><span class=\"pre\">best_pizza</span></code> がすでに読み込まれたことを検出でき、再読み込みをスキップできます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">prefetch_related</span></code> を連結して呼び出すと、事前読み込みのルックアップを蓄積します。すべての <code class=\"docutils literal notranslate\"><span class=\"pre\">prefetch_related</span></code> 動作をクリアするには <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> パラメータを渡してください。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">non_prefetched</span> <span class=\"o\">=</span> <span class=\"n\">qs</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">prefetch_related</span></code> を使う際の違いの一つは、一つのクエリで生成されたオブジェクトは関連した異なるオブジェクト間で共有できることです。例えば、単一の Python モデルインスタンスは、返されたオブジェクトのツリー内で複数現れることができます。これは通常、外部キーで発生します。通常、この動作は問題とはならず、むしろメモリと CPU の両方を節約します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">prefetch_related</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">GenericForeignKey</span></code> リレーションシップの事前読み込みをサポートしますが、クエリ数はデータに依存します。<code class=\"docutils literal notranslate\"><span class=\"pre\">GenericForeignKey</span></code> は複数のテーブルでデータを参照できるので、すべてのアイテムに対する単一のクエリではなく各テーブルを参照するクエリが必要となります。関連する行がまだ取得されていない場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">ContentType</span></code> テーブルで追加的なクエリが必要となります。</p>\n<p>ほとんどの場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">prefetch_related</span></code> は 'IN' 演算子を使った SQL クエリで実装されます。つまり、大きな <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> の場合は大きな 'IN' 句が生成される可能性があり、データベースによっては SQL クエリのパースや実行時にパフォーマンス上の問題が発生する可能性があります。使用するケースに応じて、常にプロファイルを分析してください！</p>\n<p>クエリの実行に <code class=\"docutils literal notranslate\"><span class=\"pre\">iterator()</span></code> を使用した場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">prefetch_related()</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">chunk_size</span></code> の値が指定されたときのみ呼び出されます。</p>\n<p><a class=\"reference internal\" href=\"#django.db.models.Prefetch\" title=\"django.db.models.Prefetch\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Prefetch</span></code></a> オブジェクトを使って、事前呼び出しの操作をより細かくコントロールできます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Prefetch</span></code> の最もシンプルな形では、従来の文字列ベースのルックアップと同等になります:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Prefetch</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Restaurant</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s2\">&quot;pizzas__toppings&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>オプションの <code class=\"docutils literal notranslate\"><span class=\"pre\">queryset</span></code> 引数を使って、独自のクエリセットを指定できます。これは、クエリセットのデフォルトの並び順を変更するために使用できます:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Restaurant</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s2\">&quot;pizzas__toppings&quot;</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">Toppings</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">))</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Or to call <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.select_related\" title=\"django.db.models.query.QuerySet.select_related\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">select_related()</span></code></a> when\napplicable to reduce the number of queries even further:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Pizza</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s2\">&quot;restaurants&quot;</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">Restaurant</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">select_related</span><span class=\"p\">(</span><span class=\"s2\">&quot;best_pizza&quot;</span><span class=\"p\">))</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n<p>また、オプションの <code class=\"docutils literal notranslate\"><span class=\"pre\">to_attr</span></code> で、事前読み込みの結果を独自の属性に割り当てることもできます。結果はリストに直接格納されます。</p>\n<p>これにより、異なる <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> で同じリレーションを複数回事前読み込みできるようになります; 例えば:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">vegetarian_pizzas</span> <span class=\"o\">=</span> <span class=\"n\">Pizza</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">vegetarian</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Restaurant</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s2\">&quot;pizzas&quot;</span><span class=\"p\">,</span> <span class=\"n\">to_attr</span><span class=\"o\">=</span><span class=\"s2\">&quot;menu&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s2\">&quot;pizzas&quot;</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">vegetarian_pizzas</span><span class=\"p\">,</span> <span class=\"n\">to_attr</span><span class=\"o\">=</span><span class=\"s2\">&quot;vegetarian_menu&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n<p>独自の <code class=\"docutils literal notranslate\"><span class=\"pre\">to_attr</span></code> で生成したルックアップはいつも通り他のルックアップでも使用可能です:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">vegetarian_pizzas</span> <span class=\"o\">=</span> <span class=\"n\">Pizza</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">vegetarian</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Restaurant</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s2\">&quot;pizzas&quot;</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">vegetarian_pizzas</span><span class=\"p\">,</span> <span class=\"n\">to_attr</span><span class=\"o\">=</span><span class=\"s2\">&quot;vegetarian_menu&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;vegetarian_menu__toppings&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">to_attr</span></code> の使用は、関係するマネージャのキャッシュにフィルタした結果を格納するよりも明確になるよう、事前読み込みした結果をフィルタする際に推奨されます:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">Pizza</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">vegetarian</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Recommended:</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">restaurants</span> <span class=\"o\">=</span> <span class=\"n\">Restaurant</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s2\">&quot;pizzas&quot;</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">queryset</span><span class=\"p\">,</span> <span class=\"n\">to_attr</span><span class=\"o\">=</span><span class=\"s2\">&quot;vegetarian_pizzas&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">vegetarian_pizzas</span> <span class=\"o\">=</span> <span class=\"n\">restaurants</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">vegetarian_pizzas</span>\n<span class=\"gp\">&gt;&gt;&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Not recommended:</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">restaurants</span> <span class=\"o\">=</span> <span class=\"n\">Restaurant</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s2\">&quot;pizzas&quot;</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">queryset</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">vegetarian_pizzas</span> <span class=\"o\">=</span> <span class=\"n\">restaurants</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">pizzas</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Custom prefetching also works with single related relations like\nforward <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></code>. Generally you'll want to use\n<a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.select_related\" title=\"django.db.models.query.QuerySet.select_related\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">select_related()</span></code></a> for these relations, but there are a number of cases\nwhere prefetching with a custom <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> is useful:</p>\n<ul>\n<li><p>関連モデルに対してさらに事前読み込みを行う <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> を使用したい。</p></li>\n<li><p>関連オブジェクトのサブセットのみを事前読み込みしたい。</p></li>\n<li><p><a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.defer\" title=\"django.db.models.query.QuerySet.defer\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">遅延読み込みフィールド</span></code></a> のようなパフォーマンス最適化のテクニックを使用したい。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">Pizza</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">only</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">restaurants</span> <span class=\"o\">=</span> <span class=\"n\">Restaurant</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s2\">&quot;best_pizza&quot;</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">queryset</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n</li>\n</ul>\n<p>複数のデータベースを使っている場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">Prefetch</span></code> はデータベースの選択を尊重します。内側のクエリがデータベースを指定していない場合、外側のクエリで指定されたデータベースを使用します。以下はすべて正しいコードです:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Both inner and outer queries will use the &#39;replica&#39; database</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Restaurant</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"s2\">&quot;pizzas__toppings&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">using</span><span class=\"p\">(</span><span class=\"s2\">&quot;replica&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Restaurant</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s2\">&quot;pizzas__toppings&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">using</span><span class=\"p\">(</span><span class=\"s2\">&quot;replica&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Inner will use the &#39;replica&#39; database; outer will use &#39;default&#39; database</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Restaurant</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s2\">&quot;pizzas__toppings&quot;</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">Toppings</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">using</span><span class=\"p\">(</span><span class=\"s2\">&quot;replica&quot;</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Inner will use &#39;replica&#39; database; outer will use &#39;cold-storage&#39; database</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Restaurant</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s2\">&quot;pizzas__toppings&quot;</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">Toppings</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">using</span><span class=\"p\">(</span><span class=\"s2\">&quot;replica&quot;</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">using</span><span class=\"p\">(</span><span class=\"s2\">&quot;cold-storage&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>ルックアップの順番は重要です。</p>\n<p>以下の例を見てみましょう:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"s2\">&quot;pizzas__toppings&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pizzas&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">'pizzas__toppings'</span></code> がすでに必要な情報を含んでいるので、並び替えしていないにもかかわらずこれは機能します。したがって 2 番目の引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">'pizzas'</span></code> は実際には不要です。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"s2\">&quot;pizzas__toppings&quot;</span><span class=\"p\">,</span> <span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s2\">&quot;pizzas&quot;</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">Pizza</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()))</span>\n</code></pre></div>\n<p>事前に見たルックアップクエリを再定義しようとしているため、これは <code class=\"docutils literal notranslate\"><span class=\"pre\">ValueError</span></code> を発生させます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">'pizzas'</span></code> を横切るために <code class=\"docutils literal notranslate\"><span class=\"pre\">'pizzas__toppings'</span></code> の一部として暗黙的なクエリセットが生成される点に留意してください。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"s2\">&quot;pizza_list__toppings&quot;</span><span class=\"p\">,</span> <span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s2\">&quot;pizzas&quot;</span><span class=\"p\">,</span> <span class=\"n\">to_attr</span><span class=\"o\">=</span><span class=\"s2\">&quot;pizza_list&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">'pizza_list__toppings'</span></code> が実行される際にまだ <code class=\"docutils literal notranslate\"><span class=\"pre\">'pizza_list'</span></code> が存在していないため、これは <code class=\"docutils literal notranslate\"><span class=\"pre\">AttributeError</span></code> を引き起こします。</p>\n<p>この注意事項は、<code class=\"docutils literal notranslate\"><span class=\"pre\">Prefetch</span></code> の使用に限りません。高度なテクニックのいくつかでは、余計なクエリの生成を防止するため、特定の順序でルックアップを実施する必要があるかもしれません。したがって、<code class=\"docutils literal notranslate\"><span class=\"pre\">prefetch_related</span></code> の引数には常に注意を払うことを推奨します。</p>\n</aside>\n</section>\n<section id=\"extra\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">extra()</span></code><a class=\"heading-anchor\" href=\"#extra\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.extra\">\n<span class=\"sig-name descname\"><span class=\"pre\">extra</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">select</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">where</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">params</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">tables</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">order_by</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">select_params</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.extra\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Django のクエリ構文だけでは、複雑な <code class=\"docutils literal notranslate\"><span class=\"pre\">WHERE</span></code> 節を簡単に表現できないことがあります。このようなエッジケースのために、 Django は <code class=\"docutils literal notranslate\"><span class=\"pre\">extra()</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> 修飾子、つまり <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> が生成する SQL に特定の句を注入するフックを提供します。</p>\n<aside class=\"admonition-use-this-method-as-a-last-resort admonition\">\n<p class=\"admonition-title\">このやり方は最後の手段として使ってください。</p>\n<p>This is an old API that we aim to deprecate at some point in the future.\nUse it only if you cannot express your query using other queryset methods.\nIf you do need to use it, please <a class=\"reference external\" href=\"https://code.djangoproject.com/newticket\">file a ticket</a> using the <a class=\"reference external\" href=\"https://code.djangoproject.com/query?keywords=~QuerySet.extra\">QuerySet.extra\nkeyword</a>\nwith your use case (please check the list of existing tickets first) so\nthat we can enhance the QuerySet API to allow removing <code class=\"docutils literal notranslate\"><span class=\"pre\">extra()</span></code>. We are\nno longer improving or fixing bugs for this method.</p>\n<p>例えば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">extra()</span></code> を使った下記のコードは:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">qs</span><span class=\"o\">.</span><span class=\"n\">extra</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">select</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;val&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;select col from sometable where othercol = </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span><span class=\"p\">},</span>\n<span class=\"gp\">... </span>    <span class=\"n\">select_params</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">someparam</span><span class=\"p\">,),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n<p>下記と等価です:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">qs</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">val</span><span class=\"o\">=</span><span class=\"n\">RawSQL</span><span class=\"p\">(</span><span class=\"s2\">&quot;select col from sometable where othercol = </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"n\">someparam</span><span class=\"p\">,)))</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"/ja/6.0/ref/models/expressions/#django.db.models.expressions.RawSQL\" title=\"django.db.models.expressions.RawSQL\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RawSQL</span></code></a> を使う主な利点は、必要に応じて <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> を指定できることです。主な欠点は、生の SQL でクエリセットのテーブルエイリアスを参照すると、Django がそのエイリアスを変更する可能性があることです (たとえば、クエリセットが別のクエリのサブクエリとして使われる場合など)。</p>\n</aside>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">extra()</span></code> を使うときは常に細心の注意を払ってください。SQL インジェクション攻撃から守るために、使うときは常に <code class=\"docutils literal notranslate\"><span class=\"pre\">params</span></code> を使用して、ユーザが制御できるパラメータをエスケープする必要があります。</p>\n<p>また、SQL文字列のプレースホルダを引用符で囲んではいけません。この例では <code class=\"docutils literal notranslate\"><span class=\"pre\">%s</span></code> を引用符で囲んでいるため、SQLインジェクションに対して脆弱です:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"n\">col</span><span class=\"w\"> </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"n\">sometable</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">othercol</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s1\">&#39;%s&#39;</span><span class=\"w\">  </span><span class=\"o\">#</span><span class=\"w\"> </span><span class=\"n\">unsafe</span><span class=\"o\">!</span>\n</code></pre></div>\n<p>Django が <a class=\"reference internal\" href=\"/ja/6.0/topics/security/#sql-injection-protection\"><span class=\"std std-ref\">SQL インジェクションを防ぐ</span></a> 仕組みの説明があります。</p>\n</aside>\n<p>定義上、これらの extra ルックアップは異なるデータベースエンジンに移植できない可能性があり（明示的にSQLコードを記述しているため）、DRY原則に違反するため、可能であれば避けるべきです。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">params</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">select</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">where</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">tables</span></code> のうち、少なくとも1つを指定します。どの引数も必須ではありませんが、少なくとも1つは指定する必要があります。</p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">select</span></code></p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">select</span></code> argument lets you put extra fields in the <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span></code>\nclause. It should be a dictionary mapping attribute names to SQL\nclauses to use to calculate that attribute.</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">extra</span><span class=\"p\">(</span><span class=\"n\">select</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;is_recent&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;pub_date &gt; &#39;2006-01-01&#39;&quot;</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>その結果、各 <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> オブジェクトには、追加の属性である <code class=\"docutils literal notranslate\"><span class=\"pre\">is_recent</span></code> が付与されます。これは、エントリーの <code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></code> が2006年1月1日よりも後の日付であるかどうかを表す真偽値です。</p>\n<p>Django は指定された SQL スニペットを <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span></code> 文に直接挿入するので、上の例の SQL は次のようになります:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"n\">blog_entry</span><span class=\"p\">.</span><span class=\"o\">*</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">pub_date</span><span class=\"w\"> </span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"s1\">&#39;2006-01-01&#39;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">AS</span><span class=\"w\"> </span><span class=\"n\">is_recent</span>\n<span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"n\">blog_entry</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>次の例はもっと高度です。サブクエリを使って、各結果の <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code> オブジェクトに、関連する <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> オブジェクトの整数カウントである <code class=\"docutils literal notranslate\"><span class=\"pre\">entry_count</span></code> 属性を付与します。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">extra</span><span class=\"p\">(</span>\n    <span class=\"n\">select</span><span class=\"o\">=</span><span class=\"p\">{</span>\n        <span class=\"s2\">&quot;entry_count&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;SELECT COUNT(*) FROM blog_entry WHERE blog_entry.blog_id = blog_blog.id&quot;</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>この特別なケースでは、クエリの <code class=\"docutils literal notranslate\"><span class=\"pre\">FROM</span></code> 句に既に <code class=\"docutils literal notranslate\"><span class=\"pre\">blog_blog</span></code> テーブルが含まれていることを利用している。</p>\n<p>上記の例の結果として得られる SQL は次のとおりです:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"n\">blog_blog</span><span class=\"p\">.</span><span class=\"o\">*</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"k\">COUNT</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"n\">blog_entry</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">blog_entry</span><span class=\"p\">.</span><span class=\"n\">blog_id</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">blog_blog</span><span class=\"p\">.</span><span class=\"n\">id</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">AS</span><span class=\"w\"> </span><span class=\"n\">entry_count</span>\n<span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"n\">blog_blog</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>ほとんどのデータベースエンジンでサブクエリに必要な括弧は、Django の <code class=\"docutils literal notranslate\"><span class=\"pre\">select</span></code> 句では必要ありません。</p>\n<p>まれに、<code class=\"docutils literal notranslate\"><span class=\"pre\">extra(select=...)</span></code> でSQLフラグメントにパラメータを渡したい場合があります。その場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">select_params</span></code> パラメータを使用してください。</p>\n<p>これは、次のように動作します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">extra</span><span class=\"p\">(</span>\n    <span class=\"n\">select</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;a&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;b&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span><span class=\"p\">},</span>\n    <span class=\"n\">select_params</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s2\">&quot;one&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;two&quot;</span><span class=\"p\">),</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>select 文内で文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">%s</span></code> をそのまま使いたい場合は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">%%s</span></code> というシーケンスを使用してください。</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">where</span></code> / <code class=\"docutils literal notranslate\"><span class=\"pre\">tables</span></code></p>\n<p>SQLの明示的な <code class=\"docutils literal notranslate\"><span class=\"pre\">WHERE</span></code> 句を定義できます。たとえば、明示的でない結合を実行するために <code class=\"docutils literal notranslate\"><span class=\"pre\">where</span></code> を使用できます。また、SQLの <code class=\"docutils literal notranslate\"><span class=\"pre\">FROM</span></code> 句に手動でテーブルを追加できます。これには <code class=\"docutils literal notranslate\"><span class=\"pre\">tables</span></code> を使用します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">where</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">tables</span></code> は、どちらも文字列のリストを取ります。全ての <code class=\"docutils literal notranslate\"><span class=\"pre\">where</span></code> パラメーターは、他の検索条件と &quot;AND&quot; 演算されます。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">extra</span><span class=\"p\">(</span><span class=\"n\">where</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;foo=&#39;a&#39; OR bar = &#39;a&#39;&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;baz = &#39;a&#39;&quot;</span><span class=\"p\">])</span>\n</code></pre></div>\n<p>...これは大まかに次の SQL に翻訳されます:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"n\">blog_entry</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">foo</span><span class=\"o\">=</span><span class=\"s1\">&#39;a&#39;</span><span class=\"w\"> </span><span class=\"k\">OR</span><span class=\"w\"> </span><span class=\"n\">bar</span><span class=\"o\">=</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">AND</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">baz</span><span class=\"o\">=</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>すでにクエリで使われているテーブルを指定する場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">tables</span></code> パラメータを使うときには注意してください。テーブル <code class=\"docutils literal notranslate\"><span class=\"pre\">tables</span></code> パラメータを使ってテーブルを追加すると、 Django はそのテーブルが既に含まれている場合、そのテーブルをもう一回追加したいと仮定します。この場合、テーブル名にエイリアスが付けられるので、問題が生じます。テーブルが SQL 文の中で複数回出現する場合、データベースが区別できるように、2 回目以降の出現にはエイリアスを使う必要があります。追加の <code class=\"docutils literal notranslate\"><span class=\"pre\">where</span></code> パラメータで追加したテーブルを参照している場合、これはエラーの原因になります。</p>\n<p>通常は、クエリに既に表示されていない追加のテーブルのみを追加します。しかし、上記の場合が発生した場合は、いくつかの解決策があります。まず、追加のテーブルを含めずに、すでにクエリにあるテーブルを使用できるかどうかを確認してください。それが不可能な場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">extra()</span></code> メソッドをクエリセットの構築の最初に配置して、そのテーブルが最初に使用されるようにします。最後に、すべてが失敗した場合は、生成されたクエリを確認し、 <code class=\"docutils literal notranslate\"><span class=\"pre\">where</span></code> 句への追加をエイリアスの利用に書き直します。エイリアスは、同じ方法でクエリセットを構築するたびに同じであるため、エイリアス名は変わらないことを信頼できます。</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">order_by</span></code></p>\n<p>If you need to order the resulting queryset using some of the new\nfields or tables you have included via <code class=\"docutils literal notranslate\"><span class=\"pre\">extra()</span></code> use the <code class=\"docutils literal notranslate\"><span class=\"pre\">order_by</span></code>\nparameter to <code class=\"docutils literal notranslate\"><span class=\"pre\">extra()</span></code> and pass in a sequence of strings. These\nstrings should either be model fields (as in the normal\n<a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.order_by\" title=\"django.db.models.query.QuerySet.order_by\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">order_by()</span></code></a> method on querysets), of the form\n<code class=\"docutils literal notranslate\"><span class=\"pre\">table_name.column_name</span></code> or an alias for a column that you specified\nin the <code class=\"docutils literal notranslate\"><span class=\"pre\">select</span></code> parameter to <code class=\"docutils literal notranslate\"><span class=\"pre\">extra()</span></code>.</p>\n<p>例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">q</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">extra</span><span class=\"p\">(</span><span class=\"n\">select</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;is_recent&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;pub_date &gt; &#39;2006-01-01&#39;&quot;</span><span class=\"p\">})</span>\n<span class=\"n\">q</span> <span class=\"o\">=</span> <span class=\"n\">q</span><span class=\"o\">.</span><span class=\"n\">extra</span><span class=\"p\">(</span><span class=\"n\">order_by</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;-is_recent&quot;</span><span class=\"p\">])</span>\n</code></pre></div>\n<p>これにより、<code class=\"docutils literal notranslate\"><span class=\"pre\">is_recent</span></code> が true であるすべてのアイテムが結果セットの先頭に並べ替えられます (降順では <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> よりも先に並びます)。</p>\n<p>ちなみに、これは <code class=\"docutils literal notranslate\"><span class=\"pre\">extra()</span></code> を複数回呼び出しても期待通りに動作する（つまり、毎回新しい制約を追加する）ことを示しています。</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">params</span></code></p>\n<p>上記の <code class=\"docutils literal notranslate\"><span class=\"pre\">where</span></code> パラメータは、標準のPythonデータベース文字列プレースホルダー、 <code class=\"docutils literal notranslate\"><span class=\"pre\">'%s'</span></code> を使用して、データベースエンジンが自動的に引用符で囲むべきパラメータを示すことができます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">params</span></code> 引数は、代入される追加のパラメータのリストです。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">extra</span><span class=\"p\">(</span><span class=\"n\">where</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;headline=</span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span><span class=\"p\">],</span> <span class=\"n\">params</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">])</span>\n</code></pre></div>\n<p>常に <code class=\"docutils literal notranslate\"><span class=\"pre\">params</span></code> を使用し、値を直接 <code class=\"docutils literal notranslate\"><span class=\"pre\">where</span></code> に埋め込まないでください。なぜなら <code class=\"docutils literal notranslate\"><span class=\"pre\">params</span></code> を使用することで、値が特定のバックエンドに応じて正しく引用符で囲まれることが保証されるからです。例えば、引用符は正しくエスケープされます。</p>\n<p>悪い例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">extra</span><span class=\"p\">(</span><span class=\"n\">where</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;headline=&#39;Lennon&#39;&quot;</span><span class=\"p\">])</span>\n</code></pre></div>\n<p>良い例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">extra</span><span class=\"p\">(</span><span class=\"n\">where</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;headline=</span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span><span class=\"p\">],</span> <span class=\"n\">params</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">])</span>\n</code></pre></div>\n</li>\n</ul>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>もしあなたが MySQL でクエリを処理する場合は、複数の型を扱う際に MySQL の暗黙的な型変換が予期しない結果をもたらす場合がある事に注意してください。もし文字列型で定義したカラムに対し、数値型の値で問い合わせた場合、MySQL は比較処理を行う前にテーブル上の全ての値の型を数値型に変換します。例えば <code class=\"docutils literal notranslate\"><span class=\"pre\">'abc'</span></code>、 <code class=\"docutils literal notranslate\"><span class=\"pre\">'def'</span></code> といった値が含まれているテーブルに対して <code class=\"docutils literal notranslate\"><span class=\"pre\">WHERE</span> <span class=\"pre\">mycolumn=0</span></code> という条件での問い合わせを行うと、両方の行がマッチします。これを防ぐため、クエリの値を利用する前に適切な型キャストを行ってください。</p>\n</aside>\n</section>\n<section id=\"defer\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">defer()</span></code><a class=\"heading-anchor\" href=\"#defer\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.defer\">\n<span class=\"sig-name descname\"><span class=\"pre\">defer</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">fields</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.defer\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>複雑なデータモデリングの場面では、モデルにはたくさんのフィールドが含まれるかもしれません。その中には、大量のデータを含むフィールド (たとえばテキストフィールド) や、Python オブジェクトに変換するために高コストな処理を必要とするフィールドがあるかもしれません。QuerySet の結果を、最初にデータを取得するときにはまだそのフィールドが必要かどうかわからないような状況で使う場合、まだデータベースからは読み込まないように Django に指示できます。</p>\n<p>読み込ませたくないフィールドの名前を <code class=\"docutils literal notranslate\"><span class=\"pre\">defer()</span></code> に渡すことで、それを実現できます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">defer</span><span class=\"p\">(</span><span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;body&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Defer（遅延読み込み）されたフィールドを持つ QuerySet はモデルインスタンスを返します。それぞれの遅延読み込みフィールドは、そのフィールドにアクセスしたときにデータベースから取得されます (すべての遅延読み込みフィールドを一度に取得するのではなく、1つずつ取得します)。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>遅延読み込みに指定されたフィールドは非同期コードからはこのように遅延ロードすることはできません。代わりに <code class=\"docutils literal notranslate\"><span class=\"pre\">SynchronousOnlyOperation</span></code> 例外が発生します。もし非同期コードを書いているのであれば、<code class=\"docutils literal notranslate\"><span class=\"pre\">defer()</span></code> されたフィールドにアクセスしようとしてはいけません。</p>\n</aside>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">defer()</span></code> を複数回呼び出すこともできます。それぞれの呼び出しは新しいフィールドを遅延読み込みリストに追加します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Defers both the body and headline fields.</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">defer</span><span class=\"p\">(</span><span class=\"s2\">&quot;body&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">rating</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">defer</span><span class=\"p\">(</span><span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>フィールドが遅延読み込みリストに追加される順番は重要ではありません。すでに遅延読み込みに指定されているフィールド名で <code class=\"docutils literal notranslate\"><span class=\"pre\">defer()</span></code> を呼び出しても意味はありません（フィールドは遅延読み込みに指定されたままです）。</p>\n<p>You can defer loading of fields in related models (if the related models are\nloading via <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.select_related\" title=\"django.db.models.query.QuerySet.select_related\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">select_related()</span></code></a>) by using the standard double-underscore\nnotation to separate related fields:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">select_related</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">defer</span><span class=\"p\">(</span><span class=\"s2\">&quot;entry__headline&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;entry__body&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>遅延読み込みフィールドの指定を消去したい場合は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">defer()</span></code> のパラメータとして <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> を渡します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Load all fields immediately.</span>\n<span class=\"n\">my_queryset</span><span class=\"o\">.</span><span class=\"n\">defer</span><span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Some fields in a model won't be deferred, even if you ask for them. You can\nnever defer the loading of the primary key. If you are using\n<a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.select_related\" title=\"django.db.models.query.QuerySet.select_related\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">select_related()</span></code></a> to retrieve related models, you shouldn't defer the\nloading of the field that connects from the primary model to the related\none, doing so will result in an error.</p>\n<p>Similarly, calling <code class=\"docutils literal notranslate\"><span class=\"pre\">defer()</span></code> (or its counterpart <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.only\" title=\"django.db.models.query.QuerySet.only\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">only()</span></code></a>) including an\nargument from an aggregation (e.g. using the result of <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.annotate\" title=\"django.db.models.query.QuerySet.annotate\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">annotate()</span></code></a>)\ndoesn't make sense: doing so will raise an exception. The aggregated values\nwill always be fetched into the resulting queryset.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">defer()</span></code> method (and its cousin, <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.only\" title=\"django.db.models.query.QuerySet.only\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">only()</span></code></a>, below) are only for\nadvanced use-cases. They provide an optimization for when you have analyzed\nyour queries closely and understand <em>exactly</em> what information you need and\nhave measured that the difference between returning the fields you need and\nthe full set of fields for the model will be significant.</p>\n<p>高度なユースケースだと思う場合でも、 <code class=\"docutils literal notranslate\"><span class=\"pre\">defer()</span></code> を使用するのは、 QuerySetのロード時に、余分なフィールドが必要かどうかを判断 <strong>できない場合だけ</strong> にしてください。データの特定のサブセットを頻繁に読み込んで使うなら、モデルを正規化し、ロードしないデータを別のモデル（とデータベーステーブル）に置くのが最善の選択です。もしカラムを一つのテーブル内に <strong>どうしても保持する必要がある</strong> 場合は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta.managed</span> <span class=\"pre\">=</span> <span class=\"pre\">False</span></code> (<a class=\"reference internal\" href=\"/ja/6.0/ref/models/options/#django.db.models.Options.managed\" title=\"django.db.models.Options.managed\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">managed</span> <span class=\"pre\">属性</span></code></a> のドキュメントを参照) に設定されたモデルを作成し、通常必要なフィールドのみを含めます。これは、通常 <code class=\"docutils literal notranslate\"><span class=\"pre\">defer()</span></code> を呼び出す場合に使用します。これにより、コードは読み手に対してより明示的になり、わずかに速くなり、Pythonプロセスで消費するメモリも少し減ります。</p>\n<p>たとえば、これらのモデルはどちらも同じデータベーステーブルを使用しています:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CommonlyUsedModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">f1</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">managed</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"n\">db_table</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;app_largetable&quot;</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ManagedModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">f1</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n    <span class=\"n\">f2</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">db_table</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;app_largetable&quot;</span>\n\n\n<span class=\"c1\"># Two equivalent QuerySets:</span>\n<span class=\"n\">CommonlyUsedModel</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"n\">ManagedModel</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">defer</span><span class=\"p\">(</span><span class=\"s2\">&quot;f2&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>非マネージドモデルと多くのフィールドを重複させる必要がある場合、共有フィールドを持つ抽象モデルを作成し、非マネージドモデルとマネージドモデルに抽象モデルを継承させるのが最善でしょう。</p>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>When calling <a class=\"reference internal\" href=\"/ja/6.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a> for instances with\ndeferred fields, only the loaded fields will be saved. See\n<a class=\"reference internal\" href=\"/ja/6.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a> for more details.</p>\n</aside>\n</section>\n<section id=\"only\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">only()</span></code><a class=\"heading-anchor\" href=\"#only\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.only\">\n<span class=\"sig-name descname\"><span class=\"pre\">only</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">fields</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.only\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">only()</span></code> メソッドは本質的に <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.defer\" title=\"django.db.models.query.QuerySet.defer\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">defer()</span></code></a> の逆です。このメソッドに渡されたフィールドのうち、既に遅延読み込みフィールドに指定されていないものだけが、 QuerySet が評価されたときに直ちにロードされます。</p>\n<p>ほとんどのフィールドが遅延読み込みされる必要があるようなモデルの場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">only()</span></code> を使って補完的なフィールドセットを指定すると、よりシンプルなコードになります。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">age</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">biography</span></code> という3つのフィールドを持つモデルがあるとします。次の2つのQuerySetは、どのフィールドが遅延読み込みされるかという点では同じです:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">defer</span><span class=\"p\">(</span><span class=\"s2\">&quot;age&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;biography&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">only</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">only()</span></code> を呼び出すと、読み込むフィールドの設定を即座に置き換えます。このメソッドは名前の通り、指定したフィールド <strong>だけ</strong> を読み込み、残りのフィールドの読み込みを先送りします。その結果、連続して <code class=\"docutils literal notranslate\"><span class=\"pre\">only()</span></code> を呼び出すと、最後に指定したフィールドだけが考慮されることになります:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># This will defer all fields except the headline.</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">only</span><span class=\"p\">(</span><span class=\"s2\">&quot;body&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;rating&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">only</span><span class=\"p\">(</span><span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">defer()</span></code> は段階的に（遅延読み込みリストにフィールドを追加しながら）動作するので、 <code class=\"docutils literal notranslate\"><span class=\"pre\">only()</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">defer()</span></code> の呼び出しは組み合わせることができ、ロジカルに動作します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Final result is that everything except &quot;headline&quot; is deferred.</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">only</span><span class=\"p\">(</span><span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;body&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">defer</span><span class=\"p\">(</span><span class=\"s2\">&quot;body&quot;</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># Final result loads headline immediately.</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">defer</span><span class=\"p\">(</span><span class=\"s2\">&quot;body&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">only</span><span class=\"p\">(</span><span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;body&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.defer\" title=\"django.db.models.query.QuerySet.defer\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">defer()</span></code></a> のドキュメントにある注意事項はすべて <code class=\"docutils literal notranslate\"><span class=\"pre\">only()</span></code> にも当てはまります。 <code class=\"docutils literal notranslate\"><span class=\"pre\">only()</span></code> は慎重に、そして他のオプションを使い果たした後にだけ使用してください。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">only()</span></code> を使って <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.select_related\" title=\"django.db.models.query.QuerySet.select_related\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">select_related()</span></code></a> で要求したフィールドを省略した場合もエラーになります。 一方、引数なしで <code class=\"docutils literal notranslate\"><span class=\"pre\">only()</span></code> を呼び出すと、queryset によって取得された全てのフィールド (アノテーションを含む) が返されます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">defer()</span></code> と同様に、非同期コードからは、まだ読み込まれていないフィールドにアクセスすることはできません。その場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">SynchronousOnlyOperation</span></code> 例外が発生します。アクセスする可能性のあるすべてのフィールドが <code class=\"docutils literal notranslate\"><span class=\"pre\">only()</span></code> 呼び出し内に含まれていることを確認してください。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>When calling <a class=\"reference internal\" href=\"/ja/6.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a> for instances with\ndeferred fields, only the loaded fields will be saved. See\n<a class=\"reference internal\" href=\"/ja/6.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a> for more details.</p>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">only()</span></code> の後に <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.defer\" title=\"django.db.models.query.QuerySet.defer\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">defer()</span></code></a> を使用すると、 <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.defer\" title=\"django.db.models.query.QuerySet.defer\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">defer()</span></code></a> のフィールドが <code class=\"docutils literal notranslate\"><span class=\"pre\">only()</span></code> を上書きします。</p>\n</aside>\n</section>\n<section id=\"using\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">using()</span></code><a class=\"heading-anchor\" href=\"#using\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.using\">\n<span class=\"sig-name descname\"><span class=\"pre\">using</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">alias</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.using\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>This method is for controlling which database the <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> will be\nevaluated against if you are using more than one database. The only argument\nthis method takes is the alias of a database, as defined in\n<a class=\"reference internal\" href=\"/ja/6.0/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASES</span></code></a>.</p>\n<p>例:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"go\"># queries the database with the &#39;default&#39; alias.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n\n<span class=\"go\"># queries the database with the &#39;backup&#39; alias</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">using</span><span class=\"p\">(</span><span class=\"s2\">&quot;backup&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"select-for-update\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">select_for_update()</span></code><a class=\"heading-anchor\" href=\"#select-for-update\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.select_for_update\">\n<span class=\"sig-name descname\"><span class=\"pre\">select_for_update</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">nowait</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">skip_locked</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">of</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">()</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">no_key</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.select_for_update\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>トランザクションが終了するまで行をロックし、サポートされているデータベース上で <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span> <span class=\"pre\">...</span> <span class=\"pre\">FOR</span> <span class=\"pre\">UPDATE</span></code> SQL 文を生成する QuerySet を返します。</p>\n<p>例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">transaction</span>\n\n<span class=\"n\">entries</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">select_for_update</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n<span class=\"k\">with</span> <span class=\"n\">transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span><span class=\"p\">():</span>\n    <span class=\"k\">for</span> <span class=\"n\">entry</span> <span class=\"ow\">in</span> <span class=\"n\">entries</span><span class=\"p\">:</span>\n        <span class=\"o\">...</span>\n</code></pre></div>\n<p>クエリセットが評価されるとき（この場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">for</span> <span class=\"pre\">entry</span> <span class=\"pre\">in</span> <span class=\"pre\">entries</span></code> ）、マッチしたすべてのエントリは、トランザクションブロックが終了するまでロックされます。つまり、他のトランザクションがそれらのエントリを変更したりロックを取得したりするのを防ぐことができます。</p>\n<p>通常、他のトランザクションが既に選択行の1つをロックしている場合、ロックが解除されるまでクエリはブロックされます。このような動作が望ましくない場合は、  <code class=\"docutils literal notranslate\"><span class=\"pre\">select_for_update(nowait=True)</span></code> を呼び出してください。これにより、呼び出しがノンブロッキングになります。競合するロックが既に他のトランザクションによって取得されている場合は、クエリセットが評価される際に <a class=\"reference internal\" href=\"/ja/6.0/ref/exceptions/#django.db.DatabaseError\" title=\"django.db.DatabaseError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">DatabaseError</span></code></a> が発生します。代わりに <code class=\"docutils literal notranslate\"><span class=\"pre\">select_for_update(skip_locked=True)</span></code> を使用すれば、ロックされた行を無視することもできます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">nowait</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">skip_locked</span></code> は互いに排他的であり、両方のオプションを有効にして <code class=\"docutils literal notranslate\"><span class=\"pre\">select_for_update()</span></code> を呼び出そうとすると <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#ValueError\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">ValueError</span></code></a> が発生します。</p>\n<p>デフォルトでは、 <code class=\"docutils literal notranslate\"><span class=\"pre\">select_for_update()</span></code> はクエリによって選択された全ての行をロックします。たとえば、クエリセットのモデルの行に加えて、 <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.select_related\" title=\"django.db.models.query.QuerySet.select_related\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">select_related()</span></code></a> で指定したリレーション先のオブジェクトの行もロックされます。この動作が望ましくない場合は、 <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.select_related\" title=\"django.db.models.query.QuerySet.select_related\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">select_related()</span></code></a> と同じフィールド構文を使って <code class=\"docutils literal notranslate\"><span class=\"pre\">select_for_update(of=(...))</span></code> でロックしたいリレーション先のオブジェクトを指定してください。クエリセットのモデルを参照するには <code class=\"docutils literal notranslate\"><span class=\"pre\">'self'</span></code> という値を使用します。</p>\n<aside class=\"admonition-lock-parents-models-in-select-for-update-of admonition\">\n<p class=\"admonition-title\">親モデルを <code class=\"docutils literal notranslate\"><span class=\"pre\">select_for_update(of=(...))</span></code> でロックする</p>\n<p><a class=\"reference internal\" href=\"/ja/6.0/topics/db/models/#multi-table-inheritance\"><span class=\"std std-ref\">マルチテーブル継承</span></a> を使用する際に親モデルをロックしたい場合は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">of</span></code> 引数に親リンクフィールド (デフォルトでは <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;parent_model_name&gt;_ptr</span></code>) を指定する必要があります。たとえば次のようになります:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Restaurant</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">select_for_update</span><span class=\"p\">(</span><span class=\"n\">of</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s2\">&quot;self&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;place_ptr&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n</aside>\n<aside class=\"admonition-using-select-for-update-of-with-specified-fields admonition\">\n<p class=\"admonition-title\">フィールドを指定して <code class=\"docutils literal notranslate\"><span class=\"pre\">select_for_update(of=(...))</span></code> を使う</p>\n<p>例えば <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.values\" title=\"django.db.models.query.QuerySet.values\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">values()</span></code></a> を使ってモデルをロックし、選択されたフィールドを指定したい場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">of</span></code> 引数で各モデルから少なくとも1つのフィールドを選択する必要があります。フィールドが選択されていないモデルはロックされません。</p>\n</aside>\n<p>PostgreSQLの場合のみ、<code class=\"docutils literal notranslate\"><span class=\"pre\">no_key=True</span></code> を渡すことで、ロックがかかっている間、（たとえば外部キーによって）ロックされた行を参照するだけの行を作成できる、より弱いロックを取得できます。PostgreSQLのドキュメントに <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/explicit-locking.html#LOCKING-ROWS\">row-level lock modes</a> についての詳細があります。</p>\n<p>null 可能なリレーションでは <code class=\"docutils literal notranslate\"><span class=\"pre\">select_for_update()</span></code> は使用できません:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">select_related</span><span class=\"p\">(</span><span class=\"s2\">&quot;hometown&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">select_for_update</span><span class=\"p\">()</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">django.db.utils.NotSupportedError</span>: <span class=\"n\">FOR UPDATE cannot be applied to the nullable side of an outer join</span>\n</code></pre></div>\n<p>この制限を回避するために、nullオブジェクトを気にしない場合は除外できます:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">select_related</span><span class=\"p\">(</span><span class=\"s2\">&quot;hometown&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">select_for_update</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">hometown</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Person: ...)&gt;, ...]&gt;</span>\n</code></pre></div>\n<p>データベースバックエンドの <code class=\"docutils literal notranslate\"><span class=\"pre\">postgresql</span></code> 、 <code class=\"docutils literal notranslate\"><span class=\"pre\">oracle</span></code> 、 <code class=\"docutils literal notranslate\"><span class=\"pre\">mysql</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">select_for_update()</span></code> をサポートしています。ただし、MariaDB は <code class=\"docutils literal notranslate\"><span class=\"pre\">nowait</span></code> 引数のみをサポートしており、MariaDB 10.6+ は <code class=\"docutils literal notranslate\"><span class=\"pre\">skip_locked</span></code> 引数もサポートしています。 <code class=\"docutils literal notranslate\"><span class=\"pre\">no_key</span></code> 引数は PostgreSQL のみでサポートされています。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">nowait=True</span></code> 、 <code class=\"docutils literal notranslate\"><span class=\"pre\">skip_locked=True</span></code> 、 <code class=\"docutils literal notranslate\"><span class=\"pre\">no_key=True</span></code> 、または <code class=\"docutils literal notranslate\"><span class=\"pre\">of</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">select_for_update()</span></code> に渡すと、MySQL のようなこれらのオプションをサポートしていないデータベースバックエンドでは <a class=\"reference internal\" href=\"/ja/6.0/ref/exceptions/#django.db.NotSupportedError\" title=\"django.db.NotSupportedError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">NotSupportedError</span></code></a> が発生します。これはコードが予期せずブロックされるのを防ぎます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span> <span class=\"pre\">...</span> <span class=\"pre\">FOR</span> <span class=\"pre\">UPDATE</span></code> をサポートしているバックエンドで <code class=\"docutils literal notranslate\"><span class=\"pre\">select_for_update()</span></code> をオートコミットモードでクエリセットを評価すると <a class=\"reference internal\" href=\"/ja/6.0/ref/exceptions/#django.db.transaction.TransactionManagementError\" title=\"django.db.transaction.TransactionManagementError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">TransactionManagementError</span></code></a> エラーになります。もしこれが許される場合、これはデータを用意に破壊します。たとえばトランザクショ ン外のトランザクションで実行されることを期待するコードを呼び出すことで簡単に破壊が起こります。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span> <span class=\"pre\">...</span> <span class=\"pre\">FOR</span> <span class=\"pre\">UPDATE</span></code> をサポートしていないバックエンド (SQLite など) で <code class=\"docutils literal notranslate\"><span class=\"pre\">select_for_update()</span></code> を使用しても意味はありません。 <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span> <span class=\"pre\">...</span> <span class=\"pre\">FOR</span> <span class=\"pre\">UPDATE</span></code> はクエリに追加されず、 <code class=\"docutils literal notranslate\"><span class=\"pre\">select_for_update()</span></code> がオートコミットモードで使用されてもエラーは発生しません。</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>Although <code class=\"docutils literal notranslate\"><span class=\"pre\">select_for_update()</span></code> normally fails in autocommit mode, since\n<a class=\"reference internal\" href=\"/ja/6.0/topics/testing/tools/#django.test.TestCase\" title=\"django.test.TestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TestCase</span></code></a> automatically wraps each test in a\ntransaction, calling <code class=\"docutils literal notranslate\"><span class=\"pre\">select_for_update()</span></code> in a <code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code> even outside\nan <a class=\"reference internal\" href=\"/ja/6.0/topics/db/transactions/#django.db.transaction.atomic\" title=\"django.db.transaction.atomic\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">atomic()</span></code></a> block will (perhaps unexpectedly)\npass without raising a <code class=\"docutils literal notranslate\"><span class=\"pre\">TransactionManagementError</span></code>. To properly test\n<code class=\"docutils literal notranslate\"><span class=\"pre\">select_for_update()</span></code> you should use\n<a class=\"reference internal\" href=\"/ja/6.0/topics/testing/tools/#django.test.TransactionTestCase\" title=\"django.test.TransactionTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code></a>.</p>\n</aside>\n<aside class=\"admonition-certain-expressions-may-not-be-supported admonition\">\n<p class=\"admonition-title\">一部の式はサポートされていません</p>\n<p>PostgreSQL は <code class=\"docutils literal notranslate\"><span class=\"pre\">select_for_update()</span></code> を <a class=\"reference internal\" href=\"/ja/6.0/ref/models/expressions/#django.db.models.expressions.Window\" title=\"django.db.models.expressions.Window\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Window</span></code></a> 式でサポートしていません。</p>\n</aside>\n</section>\n<section id=\"raw\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">raw()</span></code><a class=\"heading-anchor\" href=\"#raw\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.raw\">\n<span class=\"sig-name descname\"><span class=\"pre\">raw</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">raw_query</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">params</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">()</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">translations</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.raw\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>素の SQL クエリを受け取って実行し、 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.models.query.RawQuerySet</span></code> インスタンスを返します。この <code class=\"docutils literal notranslate\"><span class=\"pre\">RawQuerySet</span></code> インスタンスは、通常の <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> と同様にイテレートすることで、オブジェクトインスタンスを生成できます。</p>\n<p>詳細は <a class=\"reference internal\" href=\"/ja/6.0/topics/db/sql/\"><span class=\"doc\">素の SQL 文の実行</span></a> を参照してください。</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">raw()</span></code> は常に新しいクエリをトリガーし、以前のフィルタリングを考慮しません。そのため、通常は <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> から呼び出すか、新しい <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> インスタンスから呼び出す必要があります。</p>\n</aside>\n</section>\n</section>\n<section id=\"operators-that-return-new-querysets\">\n<h3>新しい <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> を返す演算子<a class=\"heading-anchor\" href=\"#operators-that-return-new-querysets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>結合したクエリセットは同じモデルを使用しなければなりません。</p>\n<section id=\"and\">\n<h4>AND (<code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;</span></code>)<a class=\"heading-anchor\" href=\"#and\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>SQL の <code class=\"docutils literal notranslate\"><span class=\"pre\">AND</span></code> 演算子を使い、フィルタを連結するのと同じように、2つの <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> を結合します。</p>\n<p>以下のコードは同等です:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Model</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">&amp;</span> <span class=\"n\">Model</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">y</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"n\">Model</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">y</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これらは SQL で言う下記と同等です:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"w\"> </span><span class=\"k\">AND</span><span class=\"w\"> </span><span class=\"n\">y</span><span class=\"o\">=</span><span class=\"mi\">2</span>\n</code></pre></div>\n</section>\n<section id=\"or\">\n<h4>OR (<code class=\"docutils literal notranslate\"><span class=\"pre\">|</span></code>)<a class=\"heading-anchor\" href=\"#or\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>SQL の <code class=\"docutils literal notranslate\"><span class=\"pre\">OR</span></code> 演算子を使用して、2つの <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> を結合します。</p>\n<p>以下のコードは同等です:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Model</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">|</span> <span class=\"n\">Model</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">y</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Q</span>\n\n<span class=\"n\">Model</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">|</span> <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">y</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>これらは SQL で言う下記と同等です:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"w\"> </span><span class=\"k\">OR</span><span class=\"w\"> </span><span class=\"n\">y</span><span class=\"o\">=</span><span class=\"mi\">2</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">|</span></code> は可換演算ではないので、（等価ではあるが）異なるクエリが生成される可能性があります。</p>\n</section>\n<section id=\"xor\">\n<h4>XOR (<code class=\"docutils literal notranslate\"><span class=\"pre\">^</span></code>)<a class=\"heading-anchor\" href=\"#xor\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>SQLの <code class=\"docutils literal notranslate\"><span class=\"pre\">XOR</span></code> 演算子を使用して、2つの <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> を結合します。<code class=\"docutils literal notranslate\"><span class=\"pre\">XOR</span></code> 式は、奇数個の条件が真である行にマッチします。</p>\n<p>以下のコードは同等です:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Model</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">^</span> <span class=\"n\">Model</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">y</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Q</span>\n\n<span class=\"n\">Model</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">^</span> <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">y</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>これらは SQL で言う下記と同等です:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"w\"> </span><span class=\"n\">XOR</span><span class=\"w\"> </span><span class=\"n\">y</span><span class=\"o\">=</span><span class=\"mi\">2</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">XOR</span></code> は MariaDB と MySQL ではネイティブでサポートされています。 他のデータベースでは、 <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span> <span class=\"pre\">^</span> <span class=\"pre\">y</span> <span class=\"pre\">^</span> <span class=\"pre\">....</span> <span class=\"pre\">z</span></code> は下記と等価な式に変換されます:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"k\">OR</span><span class=\"w\"> </span><span class=\"n\">y</span><span class=\"w\"> </span><span class=\"k\">OR</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">OR</span><span class=\"w\"> </span><span class=\"n\">z</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">AND</span>\n<span class=\"mi\">1</span><span class=\"o\">=</span><span class=\"k\">MOD</span><span class=\"p\">(</span>\n<span class=\"w\">    </span><span class=\"p\">(</span><span class=\"k\">CASE</span><span class=\"w\"> </span><span class=\"k\">WHEN</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"k\">THEN</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"w\"> </span><span class=\"k\">ELSE</span><span class=\"w\"> </span><span class=\"mi\">0</span><span class=\"w\"> </span><span class=\"k\">END</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">+</span>\n<span class=\"w\">    </span><span class=\"p\">(</span><span class=\"k\">CASE</span><span class=\"w\"> </span><span class=\"k\">WHEN</span><span class=\"w\"> </span><span class=\"n\">y</span><span class=\"w\"> </span><span class=\"k\">THEN</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"w\"> </span><span class=\"k\">ELSE</span><span class=\"w\"> </span><span class=\"mi\">0</span><span class=\"w\"> </span><span class=\"k\">END</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">+</span>\n<span class=\"w\">    </span><span class=\"p\">...</span>\n<span class=\"w\">    </span><span class=\"p\">(</span><span class=\"k\">CASE</span><span class=\"w\"> </span><span class=\"k\">WHEN</span><span class=\"w\"> </span><span class=\"n\">z</span><span class=\"w\"> </span><span class=\"k\">THEN</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"w\"> </span><span class=\"k\">ELSE</span><span class=\"w\"> </span><span class=\"mi\">0</span><span class=\"w\"> </span><span class=\"k\">END</span><span class=\"p\">),</span>\n<span class=\"w\">    </span><span class=\"mi\">2</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n</aside>\n</section>\n</section>\n<section id=\"methods-that-do-not-return-querysets\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> を返さないメソッド<a class=\"heading-anchor\" href=\"#methods-that-do-not-return-querysets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>以下の <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> メソッドは <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> を評価し、 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> 以外のものを返します。</p>\n<p>これらのメソッドはキャッシュを使用しません ( <a class=\"reference internal\" href=\"/ja/6.0/topics/db/queries/#caching-and-querysets\"><span class=\"std std-ref\">キャッシュと QuerySet</span></a> を参照してください)。むしろ、呼び出されるたびにデータベースにクエリを行います。</p>\n<p>これらのメソッドは <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> を評価するので、ブロッキング呼び出しとなり、そのため主な（同期）バージョンは非同期コードから呼び出すことはできません。このため、それぞれに対応する非同期バージョンがあり、 <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> 接頭辞が付いています。例えば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">get(…)</span></code> の代わりに <code class=\"docutils literal notranslate\"><span class=\"pre\">await</span> <span class=\"pre\">aget(…)</span></code> が使用できます。</p>\n<p>これらのメソッドの挙動には、通常その非同期性以外に違いはありませんが、各メソッドの具体的な違いは、それぞれのメソッドの説明のすぐそばに記載されています。</p>\n<section id=\"get\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">get()</span></code><a class=\"heading-anchor\" href=\"#get\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.get\">\n<span class=\"sig-name descname\"><span class=\"pre\">get</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">args</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.get\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.aget\">\n<span class=\"sig-name descname\"><span class=\"pre\">aget</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">args</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.aget\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aget()</span></code></p>\n<p>指定されたルックアップパラメータに一致するオブジェクトを返します。これらのパラメータは、 <a class=\"reference internal\" href=\"#id4\">Field lookups</a> で説明されている形式に従うべきです。主キーやユニーク制約のあるフィールドのように、一意性が保証されるルックアップを使うべきです。例えば下記のようにします:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">blog</span><span class=\"o\">=</span><span class=\"n\">blog</span><span class=\"p\">)</span> <span class=\"o\">&amp;</span> <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">entry_number</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>クエリセットがすでに1行だけを返すことがわかっている場合、引数なしで <code class=\"docutils literal notranslate\"><span class=\"pre\">get()</span></code> を使うことでその行のオブジェクトを取得できます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>もし <code class=\"docutils literal notranslate\"><span class=\"pre\">get()</span></code> がオブジェクトを見つけられなかった場合は、 <a class=\"reference internal\" href=\"/ja/6.0/ref/models/class/#django.db.models.Model.DoesNotExist\" title=\"django.db.models.Model.DoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">Model.DoesNotExist</span></code></a> 例外が発生します。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=-</span><span class=\"mi\">999</span><span class=\"p\">)</span>  <span class=\"c1\"># raises Entry.DoesNotExist</span>\n</code></pre></div>\n<p>もし <code class=\"docutils literal notranslate\"><span class=\"pre\">get()</span></code> が複数のオブジェクトを見つけた場合は、 <a class=\"reference internal\" href=\"/ja/6.0/ref/models/class/#django.db.models.Model.MultipleObjectsReturned\" title=\"django.db.models.Model.MultipleObjectsReturned\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">Model.MultipleObjectsReturned</span></code></a> 例外が発生します。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;A Duplicated Name&quot;</span><span class=\"p\">)</span>  <span class=\"c1\"># raises Entry.MultipleObjectsReturned</span>\n</code></pre></div>\n<p>これらの例外クラスはモデルクラスの属性であり、そのモデルに特有のものです。複数のモデルに対する <code class=\"docutils literal notranslate\"><span class=\"pre\">get()</span></code> 呼び出しでこのような例外を処理したい場合、一般的な基底クラスを使用できます。たとえば下記のように、 <a class=\"reference internal\" href=\"/ja/6.0/ref/exceptions/#django.core.exceptions.ObjectDoesNotExist\" title=\"django.core.exceptions.ObjectDoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">django.core.exceptions.ObjectDoesNotExist</span></code></a> を使って、複数のモデルからの <a class=\"reference internal\" href=\"/ja/6.0/ref/models/class/#django.db.models.Model.DoesNotExist\" title=\"django.db.models.Model.DoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">DoesNotExist</span></code></a> 例外をできます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.exceptions</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ObjectDoesNotExist</span>\n\n<span class=\"k\">try</span><span class=\"p\">:</span>\n    <span class=\"n\">blog</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"n\">entry</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">blog</span><span class=\"o\">=</span><span class=\"n\">blog</span><span class=\"p\">,</span> <span class=\"n\">entry_number</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"k\">except</span> <span class=\"n\">ObjectDoesNotExist</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;Either the blog or entry doesn&#39;t exist.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"create\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">create()</span></code><a class=\"heading-anchor\" href=\"#create\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.create\">\n<span class=\"sig-name descname\"><span class=\"pre\">create</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.create\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.acreate\">\n<span class=\"sig-name descname\"><span class=\"pre\">acreate</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.acreate\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">acreate()</span></code></p>\n<p>A convenience method for creating an object and saving it all in one step.\nThus:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">first_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Bruce&quot;</span><span class=\"p\">,</span> <span class=\"n\">last_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Springsteen&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>そして、:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">Person</span><span class=\"p\">(</span><span class=\"n\">first_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Bruce&quot;</span><span class=\"p\">,</span> <span class=\"n\">last_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Springsteen&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">force_insert</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これらは同等です。</p>\n<p>別の場所で <a class=\"reference internal\" href=\"/ja/6.0/ref/models/instances/#ref-models-force-insert\"><span class=\"std std-ref\">force_insert</span></a> パラメータについても説明していますが、それは新しいオブジェクトを常に作成するよう強制するものです。普通はこれを気にする必要はありません。しかし、モデルが手動で指定した主キー値を含み、その値が既にデータベースに存在する場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">create()</span></code> の呼び出しは <a class=\"reference internal\" href=\"/ja/6.0/ref/exceptions/#django.db.IntegrityError\" title=\"django.db.IntegrityError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">IntegrityError</span></code></a> で失敗します。これは、主キーは一意である必要があるためです。手動の主キーを使用している場合は、例外処理に備える必要があります。</p>\n</section>\n<section id=\"get-or-create\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">get_or_create()</span></code><a class=\"heading-anchor\" href=\"#get-or-create\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.get_or_create\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_or_create</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">defaults</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.get_or_create\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.aget_or_create\">\n<span class=\"sig-name descname\"><span class=\"pre\">aget_or_create</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">defaults</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.aget_or_create\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aget_or_create()</span></code></p>\n<p>与えられた <code class=\"docutils literal notranslate\"><span class=\"pre\">kwargs</span></code> を持つオブジェクトを検索するための便利なメソッドです (モデルがすべてのフィールドをデフォルトで持っている場合は空でもかまいません)。</p>\n<p>(Object, created) のタプルを返します。&quot;Object&quot;は受け取ったものか作られたものです。そして&quot;created&quot;はそのObjectが作られたものかどうかのBooleanです。</p>\n<p>これは、リクエストが並列処理されたときに、重複したオブジェクトが生成されるのを防ぐため、また、定型的なコードへのショートカットのためです。たとえば次のような場合、:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">try</span><span class=\"p\">:</span>\n    <span class=\"n\">obj</span> <span class=\"o\">=</span> <span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">first_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;John&quot;</span><span class=\"p\">,</span> <span class=\"n\">last_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">except</span> <span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n    <span class=\"n\">obj</span> <span class=\"o\">=</span> <span class=\"n\">Person</span><span class=\"p\">(</span><span class=\"n\">first_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;John&quot;</span><span class=\"p\">,</span> <span class=\"n\">last_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">,</span> <span class=\"n\">birthday</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"p\">(</span><span class=\"mi\">1940</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">))</span>\n    <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>ここで、同時リクエストにより、同じパラメータで <code class=\"docutils literal notranslate\"><span class=\"pre\">Person</span></code> を保存しようとする試みが複数回行われる可能性があります。この競合状態を回避するために、上記の例は <code class=\"docutils literal notranslate\"><span class=\"pre\">get_or_create()</span></code> を使って次のように書き換えることができます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">obj</span><span class=\"p\">,</span> <span class=\"n\">created</span> <span class=\"o\">=</span> <span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_or_create</span><span class=\"p\">(</span>\n    <span class=\"n\">first_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;John&quot;</span><span class=\"p\">,</span>\n    <span class=\"n\">last_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">,</span>\n    <span class=\"n\">defaults</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;birthday&quot;</span><span class=\"p\">:</span> <span class=\"n\">date</span><span class=\"p\">(</span><span class=\"mi\">1940</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">)},</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Any keyword arguments passed to <code class=\"docutils literal notranslate\"><span class=\"pre\">get_or_create()</span></code> — <em>except</em> an optional one\ncalled <code class=\"docutils literal notranslate\"><span class=\"pre\">defaults</span></code> — will be used in a <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get()</span></code></a> call. If an object is\nfound, <code class=\"docutils literal notranslate\"><span class=\"pre\">get_or_create()</span></code> returns a tuple of that object and <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>このメソッドはデータベースがキーワード引数の一意性を強制していると仮定してアトミックに動作します (<a class=\"reference internal\" href=\"/ja/6.0/ref/models/fields/#django.db.models.Field.unique\" title=\"django.db.models.Field.unique\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">unique</span></code></a> または <a class=\"reference internal\" href=\"/ja/6.0/ref/models/options/#django.db.models.Options.unique_together\" title=\"django.db.models.Options.unique_together\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">unique_together</span></code></a> を参照してください)。キーワード引数で使用されるフィールドにユニーク制約がない場合、このメソッドを同時に呼び出すと、同じパラメータを持つ複数の行が挿入される可能性があります。</p>\n</aside>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">get_or_create()</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">filter()</span></code> を連結し、 <a class=\"reference internal\" href=\"#django.db.models.Q\" title=\"django.db.models.Q\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Q</span> <span class=\"pre\">オブジェクト</span></code></a> を使用することで、取得するオブジェクトに対してより複雑な条件を指定できます。たとえば次のコードは、Robert と Bob Marley のどちらかが存在すればそれを取得し、そうでなければ後者（Bob Marley）を作成します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Q</span>\n\n<span class=\"n\">obj</span><span class=\"p\">,</span> <span class=\"n\">created</span> <span class=\"o\">=</span> <span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n    <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">first_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">)</span> <span class=\"o\">|</span> <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">first_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Robert&quot;</span><span class=\"p\">),</span>\n<span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">get_or_create</span><span class=\"p\">(</span><span class=\"n\">last_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Marley&quot;</span><span class=\"p\">,</span> <span class=\"n\">defaults</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>複数のオブジェクトが見つかった場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">get_or_create()</span></code> は <a class=\"reference internal\" href=\"/ja/6.0/ref/exceptions/#django.core.exceptions.MultipleObjectsReturned\" title=\"django.core.exceptions.MultipleObjectsReturned\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">MultipleObjectsReturned</span></code></a> を発生させます。オブジェクトが ** 見つからなかった** 場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">get_or_create()</span></code> は新しいオブジェクトをインスタンス化して保存し、新しいオブジェクトと <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> のタプルを返します。新しいオブジェクトはおおよそ以下のアルゴリズムに従って作成されます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">params</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">k</span><span class=\"p\">:</span> <span class=\"n\">v</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">kwargs</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()</span> <span class=\"k\">if</span> <span class=\"s2\">&quot;__&quot;</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">k</span><span class=\"p\">}</span>\n<span class=\"n\">params</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">({</span><span class=\"n\">k</span><span class=\"p\">:</span> <span class=\"n\">v</span><span class=\"p\">()</span> <span class=\"k\">if</span> <span class=\"nb\">callable</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">)</span> <span class=\"k\">else</span> <span class=\"n\">v</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">defaults</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()})</span>\n<span class=\"n\">obj</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">params</span><span class=\"p\">)</span>\n<span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>英語では、<code class=\"docutils literal notranslate\"><span class=\"pre\">defaults'</span></code> 以外のキーワード引数で、2重アンダースコア（これはexact以外のルックアップを意味します）を含まないものから始めることを意味します。次に <code class=\"docutils literal notranslate\"><span class=\"pre\">defaults</span></code> の内容を追加し、必要であればキーを上書きして、その結果をモデルクラスのキーワード引数として使用します。もし <code class=\"docutils literal notranslate\"><span class=\"pre\">defaults</span></code> に呼び出し可能オブジェクトがあれば、それを評価します。上記のように、これは使用されるアルゴリズムを簡略化したものですが、適切な詳細はすべて含まれています。内部実装では、これよりもさらに多くのエラーチェックが行われ、エッジ条件も処理されます。興味があれば、コードを読んでください。</p>\n<p>もし <code class=\"docutils literal notranslate\"><span class=\"pre\">defaults</span></code> という名前のフィールドがあり、それを <code class=\"docutils literal notranslate\"><span class=\"pre\">get_or_create()</span></code> で正確にルックアップしたい場合は、次のように <code class=\"docutils literal notranslate\"><span class=\"pre\">'defaults__exact'</span></code> を使用します：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Foo</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_or_create</span><span class=\"p\">(</span><span class=\"n\">defaults__exact</span><span class=\"o\">=</span><span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">,</span> <span class=\"n\">defaults</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;defaults&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;baz&quot;</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">get_or_create()</span></code> method has similar error behavior to <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.create\" title=\"django.db.models.query.QuerySet.create\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">create()</span></code></a>\nwhen you're using manually specified primary keys. If an object needs to be\ncreated and the key already exists in the database, an\n<a class=\"reference internal\" href=\"/ja/6.0/ref/exceptions/#django.db.IntegrityError\" title=\"django.db.IntegrityError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">IntegrityError</span></code></a> will be raised.</p>\n<p>最後に、Djangoビューで``get_or_create()``を使用する際の注意点について説明します。よほどの理由がない限り、 <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> リクエスト以外では使用しないようにしてください。 <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> リクエストはデータに影響を与えるべきではありません。代わりに、データに副作用がある場合は常に``POST``を使用してください。詳細については、HTTP仕様の <span class=\"target\" id=\"index-8\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc9110.html#section-9.2.1\"><strong>安全なメソッド</strong></a> を参照してください。</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p><a class=\"reference internal\" href=\"/ja/6.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a> 属性と逆リレーションを通じて <code class=\"docutils literal notranslate\"><span class=\"pre\">get_or_create()</span></code> を使うことができます。この場合、クエリはリレーションのコンテキスト内で制限されます。一貫して使用しないと、整合性の問題が発生する可能性があります。</p>\n<p>下記のモデルでは、:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Chapter</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">255</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Book</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">256</span><span class=\"p\">)</span>\n    <span class=\"n\">chapters</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"n\">Chapter</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">get_or_create()</span></code> は Book の chapters フィールドを通して使うことができますが、その本のコンテキスト内でしか取得できません:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">book</span> <span class=\"o\">=</span> <span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s2\">&quot;Ulysses&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">book</span><span class=\"o\">.</span><span class=\"n\">chapters</span><span class=\"o\">.</span><span class=\"n\">get_or_create</span><span class=\"p\">(</span><span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s2\">&quot;Telemachus&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">(&lt;Chapter: Telemachus&gt;, True)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">book</span><span class=\"o\">.</span><span class=\"n\">chapters</span><span class=\"o\">.</span><span class=\"n\">get_or_create</span><span class=\"p\">(</span><span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s2\">&quot;Telemachus&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">(&lt;Chapter: Telemachus&gt;, False)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Chapter</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s2\">&quot;Chapter 1&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;Chapter: Chapter 1&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">book</span><span class=\"o\">.</span><span class=\"n\">chapters</span><span class=\"o\">.</span><span class=\"n\">get_or_create</span><span class=\"p\">(</span><span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s2\">&quot;Chapter 1&quot;</span><span class=\"p\">)</span>\n<span class=\"go\"># Raises IntegrityError</span>\n</code></pre></div>\n<p>これは Book ”Ulysses&quot; を介して &quot;Chapter 1&quot; を取得または作成しようとしているために発生していますが、どちらの操作も失敗します。 &quot;Chapter1&quot; が &quot;Ulysess&quot; に関連付けられていないため取得に失敗します。また、 <code class=\"docutils literal notranslate\"><span class=\"pre\">title</span></code> フィールドは一意でなくてはならないので、作成にも失敗します。</p>\n</aside>\n</section>\n<section id=\"update-or-create\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">update_or_create()</span></code><a class=\"heading-anchor\" href=\"#update-or-create\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.update_or_create\">\n<span class=\"sig-name descname\"><span class=\"pre\">update_or_create</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">defaults</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">create_defaults</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.update_or_create\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.aupdate_or_create\">\n<span class=\"sig-name descname\"><span class=\"pre\">aupdate_or_create</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">defaults</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">create_defaults</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.aupdate_or_create\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aupdate_or_create()</span></code></p>\n<p>与えられた <code class=\"docutils literal notranslate\"><span class=\"pre\">kwargs</span></code> でオブジェクトを更新し、必要に応じて新しいオブジェクトを作成する便利なメソッドです。 <code class=\"docutils literal notranslate\"><span class=\"pre\">create_defaults</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">defaults</span></code> はどちらも (field, value) のペアの辞書です。 <code class=\"docutils literal notranslate\"><span class=\"pre\">create_defaults</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">defaults</span></code> の値はどちらも呼び出し可能オブジェクトです。  <code class=\"docutils literal notranslate\"><span class=\"pre\">defaults</span></code> はオブジェクトを更新する際に使用され、<code class=\"docutils literal notranslate\"><span class=\"pre\">create_defaults</span></code> はオブジェクトを作成する際に使用されます。もし <code class=\"docutils literal notranslate\"><span class=\"pre\">create_defaults</span></code> が指定されなかった場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">defaults</span></code> が作成操作に使用されます。</p>\n<p>(Object, created) のタプルを返します。&quot;Object&quot;は受け取ったものか更新したものです。そして&quot;created&quot;はそのObjectが更新されたものかどうかのBooleanです。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">update_or_create</span></code> メソッドは、与えられた <code class=\"docutils literal notranslate\"><span class=\"pre\">kwargs</span></code> に基づいてデータベースからオブジェクトを取得しようとします。一致するオブジェクトが見つかった場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">defaults</span></code> 辞書に渡されたフィールドを更新します。</p>\n<p>これは定型的なコードへのショートカットです。たとえば次のようなものです:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">defaults</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">}</span>\n<span class=\"n\">create_defaults</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;birthday&quot;</span><span class=\"p\">:</span> <span class=\"n\">date</span><span class=\"p\">(</span><span class=\"mi\">1940</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">)}</span>\n<span class=\"k\">try</span><span class=\"p\">:</span>\n    <span class=\"n\">obj</span> <span class=\"o\">=</span> <span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">first_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;John&quot;</span><span class=\"p\">,</span> <span class=\"n\">last_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"n\">defaults</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n        <span class=\"nb\">setattr</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">)</span>\n    <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n<span class=\"k\">except</span> <span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n    <span class=\"n\">new_values</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;John&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">}</span>\n    <span class=\"n\">new_values</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">create_defaults</span><span class=\"p\">)</span>\n    <span class=\"n\">obj</span> <span class=\"o\">=</span> <span class=\"n\">Person</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">new_values</span><span class=\"p\">)</span>\n    <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>モデル内のフィールドの数が増えるにつれて、このパターンはかなり扱いにくくなります。上記の例は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">update_or_create()</span></code> を使って次のように書き換えることができます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">obj</span><span class=\"p\">,</span> <span class=\"n\">created</span> <span class=\"o\">=</span> <span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">update_or_create</span><span class=\"p\">(</span>\n    <span class=\"n\">first_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;John&quot;</span><span class=\"p\">,</span>\n    <span class=\"n\">last_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">,</span>\n    <span class=\"n\">defaults</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">},</span>\n    <span class=\"n\">create_defaults</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;birthday&quot;</span><span class=\"p\">:</span> <span class=\"n\">date</span><span class=\"p\">(</span><span class=\"mi\">1940</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">)},</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">kwargs</span></code> で渡された名前がどのように解決されるかについては <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.get_or_create\" title=\"django.db.models.query.QuerySet.get_or_create\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_or_create()</span></code></a> を参照してください。</p>\n<p>上記の <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.get_or_create\" title=\"django.db.models.query.QuerySet.get_or_create\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_or_create()</span></code></a> で説明したように、このメソッドは、データベースレベルで一意性が強制されていない場合、複数の行が同時に挿入される競合状態に陥りがちです。</p>\n<p><a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.get_or_create\" title=\"django.db.models.query.QuerySet.get_or_create\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_or_create()</span></code></a> や <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.create\" title=\"django.db.models.query.QuerySet.create\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">create()</span></code></a> と同様に、手動で指定した主キーを使用していて、オブジェクトを作成する必要があるが、そのキーが既にデータベースに存在する場合、 <a class=\"reference internal\" href=\"/ja/6.0/ref/exceptions/#django.db.IntegrityError\" title=\"django.db.IntegrityError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">IntegrityError</span></code></a> が発生します。</p>\n</section>\n<section id=\"bulk-create\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">bulk_create()</span></code><a class=\"heading-anchor\" href=\"#bulk-create\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.bulk_create\">\n<span class=\"sig-name descname\"><span class=\"pre\">bulk_create</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">objs</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">batch_size</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">ignore_conflicts</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">update_conflicts</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">update_fields</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">unique_fields</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.bulk_create\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.abulk_create\">\n<span class=\"sig-name descname\"><span class=\"pre\">abulk_create</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">objs</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">batch_size</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">ignore_conflicts</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">update_conflicts</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">update_fields</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">unique_fields</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.abulk_create\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">abulk_create()</span></code></p>\n<p>このメソッドは、指定されたオブジェクトのリストを効率的な方法でデータベースに挿入し (通常、オブジェクトの数にかかわらずクエリは 1 回だけです)、作成されたオブジェクトを指定された順序でリストとして返します:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">objs</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">bulk_create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"p\">[</span>\n<span class=\"gp\">... </span>        <span class=\"n\">Entry</span><span class=\"p\">(</span><span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;This is a test&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">Entry</span><span class=\"p\">(</span><span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;This is only a test&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"p\">]</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n<p>しかし、これにはいくつかの注意点があります:</p>\n<ul>\n<li><p>モデルの <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> メソッドは呼び出されず、 <code class=\"docutils literal notranslate\"><span class=\"pre\">pre_save</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">post_save</span></code> シグナルは送信されません。</p></li>\n<li><p>マルチテーブル継承の子にあたるモデルでは動作しません。</p></li>\n<li><p>If the model's primary key is an <a class=\"reference internal\" href=\"/ja/6.0/ref/models/fields/#django.db.models.AutoField\" title=\"django.db.models.AutoField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AutoField</span></code></a> or has\na <a class=\"reference internal\" href=\"/ja/6.0/ref/models/fields/#django.db.models.Field.db_default\" title=\"django.db.models.Field.db_default\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">db_default</span></code></a> value, and <code class=\"docutils literal notranslate\"><span class=\"pre\">ignore_conflicts</span></code>\nis <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, the primary key attribute can only be retrieved on certain\ndatabases (currently PostgreSQL, MariaDB, and SQLite 3.35+). On other\ndatabases, it will not be set.</p></li>\n<li><p>多対多のリレーションシップでは動作しません。</p></li>\n<li><p>これは <code class=\"docutils literal notranslate\"><span class=\"pre\">objs</span></code> をリストにキャストし、それがジェネレータであれば <code class=\"docutils literal notranslate\"><span class=\"pre\">objs</span></code> を完全に評価します。このキャストにより、手動で主キーを指定したオブジェクトを最初に挿入できるように、すべてのオブジェクトを検査できます。ジェネレータ全体を一度に評価することなく、オブジェクトを一括して挿入したい場合は、オブジェクトに手動で指定した主キーがない限り、このテクニックを使用できます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">itertools</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">islice</span>\n\n<span class=\"n\">batch_size</span> <span class=\"o\">=</span> <span class=\"mi\">100</span>\n<span class=\"n\">objs</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Entry</span><span class=\"p\">(</span><span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;Test </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"n\">i</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">1000</span><span class=\"p\">))</span>\n<span class=\"k\">while</span> <span class=\"kc\">True</span><span class=\"p\">:</span>\n    <span class=\"n\">batch</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">islice</span><span class=\"p\">(</span><span class=\"n\">objs</span><span class=\"p\">,</span> <span class=\"n\">batch_size</span><span class=\"p\">))</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">batch</span><span class=\"p\">:</span>\n        <span class=\"k\">break</span>\n    <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">bulk_create</span><span class=\"p\">(</span><span class=\"n\">batch</span><span class=\"p\">,</span> <span class=\"n\">batch_size</span><span class=\"p\">)</span>\n</code></pre></div>\n</li>\n</ul>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">batch_size</span></code> パラメータは、1 回のクエリで作成されるオブジェクトの数を制御します。デフォルトでは、データベースが許容する限り多くのオブジェクトを 1 バッチで作成します。（SQLite および Oracle では、クエリ内のパラメータ数に制限があります。）</p>\n<p>これをサポートしているデータベース（Oracleを除くすべてのデータベース）では、 <code class=\"docutils literal notranslate\"><span class=\"pre\">ignore_conflicts</span></code> パラメータを <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> に設定すると、一意な値の重複などの制約に違反する行の挿入の失敗を無視するようになります。</p>\n<p>これをサポートしているデータベース（Oracleを除くすべてのデータベース）では、 <code class=\"docutils literal notranslate\"><span class=\"pre\">update_conflicts</span></code> パラメータを <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> に設定すると、行の挿入が競合して失敗したときに <code class=\"docutils literal notranslate\"><span class=\"pre\">update_fields</span></code> を更新するようになります。PostgreSQL と SQLite では、 <code class=\"docutils literal notranslate\"><span class=\"pre\">update_fields</span></code> に加えて、競合する可能性のある <code class=\"docutils literal notranslate\"><span class=\"pre\">unique_fields</span></code> のリストを指定する必要があります。</p>\n<p>パラメータ <code class=\"docutils literal notranslate\"><span class=\"pre\">ignore_conflicts</span></code> を有効にすると、各モデルのインスタンスに主キーを指定できなくなります（データベースが通常サポートしている場合）。</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>MySQL と MariaDB では、 <code class=\"docutils literal notranslate\"><span class=\"pre\">ignore_conflicts</span></code> パラメータを <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> に設定すると、重複キー以外の特定の種類のエラーが警告に変わります。Strict モードでも同様です。たとえば、無効な値やnull制約違反などです。詳細は <a class=\"reference external\" href=\"https://dev.mysql.com/doc/refman/en/sql-mode.html#ignore-strict-comparison\">MySQL documentation</a> と <a class=\"reference external\" href=\"https://mariadb.com/kb/en/ignore/\">MariaDB documentation</a> を参照してください。</p>\n</aside>\n</section>\n<section id=\"bulk-update\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">bulk_update()</span></code><a class=\"heading-anchor\" href=\"#bulk-update\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.bulk_update\">\n<span class=\"sig-name descname\"><span class=\"pre\">bulk_update</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">objs</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">fields</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">batch_size</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.bulk_update\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.abulk_update\">\n<span class=\"sig-name descname\"><span class=\"pre\">abulk_update</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">objs</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">fields</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">batch_size</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.abulk_update\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">abulk_update()</span></code></p>\n<p>このメソッドは、通常1回のクエリで、指定されたモデルインスタンスの指定されたフィールドを効率的に更新し、更新されたオブジェクトの数を返します:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">objs</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n<span class=\"gp\">... </span>    <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;Entry 1&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;Entry 2&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">objs</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">headline</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;This is entry 1&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">objs</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">headline</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;This is entry 2&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">bulk_update</span><span class=\"p\">(</span><span class=\"n\">objs</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">2</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.update\" title=\"django.db.models.query.QuerySet.update\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">QuerySet.update()</span></code></a> は変更を保存するために使用されるので、モデルのリストをイテレートしてそれぞれ <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> を呼び出すよりも効率的ですが、いくつかの注意点があります:</p>\n<ul>\n<li><p>モデルの主キーは更新できません。</p></li>\n<li><p>各モデルの <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> メソッドは呼び出されず、 <a class=\"reference internal\" href=\"/ja/6.0/ref/signals/#django.db.models.signals.pre_save\" title=\"django.db.models.signals.pre_save\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">pre_save</span></code></a> と <a class=\"reference internal\" href=\"/ja/6.0/ref/signals/#django.db.models.signals.post_save\" title=\"django.db.models.signals.post_save\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">post_save</span></code></a> シグナルは送信されません。</p></li>\n<li><p>多数の行の多数のカラムを更新する場合、生成されるSQLは非常に大きくなる可能性があります。これを避けるには、適切な <code class=\"docutils literal notranslate\"><span class=\"pre\">batch_size</span></code> を指定します。</p></li>\n<li><p>多数のオブジェクトを更新する場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">bulk_update()</span></code> はクエリを実行する前に、すべてのバッチにわたって各オブジェクトに対する <code class=\"docutils literal notranslate\"><span class=\"pre\">WHEN</span></code> 句をあらかじめ準備することに注意してください。この処理は予想以上に多くのメモリを必要とする場合があります。メモリ使用量を削減するには、次のような方法を利用できます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">itertools</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">islice</span>\n\n<span class=\"n\">batch_size</span> <span class=\"o\">=</span> <span class=\"mi\">100</span>\n<span class=\"n\">ids_iter</span> <span class=\"o\">=</span> <span class=\"nb\">iter</span><span class=\"p\">(</span><span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">1000</span><span class=\"p\">))</span>\n<span class=\"k\">while</span> <span class=\"n\">ids</span> <span class=\"o\">:=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">islice</span><span class=\"p\">(</span><span class=\"n\">ids_iter</span><span class=\"p\">,</span> <span class=\"n\">batch_size</span><span class=\"p\">)):</span>\n    <span class=\"n\">batch</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">id__in</span><span class=\"o\">=</span><span class=\"n\">ids</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> <span class=\"n\">entry</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"p\">:</span>\n        <span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">headline</span> <span class=\"o\">=</span> <span class=\"sa\">f</span><span class=\"s2\">&quot;Updated headline </span><span class=\"si\">{</span><span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">pk</span><span class=\"si\">}</span><span class=\"s2\">&quot;</span>\n    <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">bulk_update</span><span class=\"p\">(</span><span class=\"n\">batch</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">],</span> <span class=\"n\">batch_size</span><span class=\"o\">=</span><span class=\"n\">batch_size</span><span class=\"p\">)</span>\n</code></pre></div>\n</li>\n<li><p>マルチテーブル継承の継承元に定義されたフィールドを更新すると、継承元ごとに追加のクエリが発生します。</p></li>\n<li><p>独立した1つのバッチ内に重複がある場合、そのバッチの最初のインスタンスだけが更新されます。</p></li>\n<li><p>関数が返す更新されたオブジェクトの数は、渡されたオブジェクトの数より少ない場合があります。これは、渡されたオブジェクトが重複して同じバッチで更新されたり、オブジェクトがデータベースに存在しなくなるような競合状態が発生したりすることが原因です。</p></li>\n</ul>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">batch_size</span></code> パラメータは、1回のクエリで保存されるオブジェクトの数を制御します。クエリで使用できる変数の数に制限がある SQLite と Oracle を除いて、デフォルトではすべてのオブジェクトを一括で更新します。</p>\n</section>\n<section id=\"count\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code><a class=\"heading-anchor\" href=\"#count\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.count\">\n<span class=\"sig-name descname\"><span class=\"pre\">count</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.count\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.acount\">\n<span class=\"sig-name descname\"><span class=\"pre\">acount</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.acount\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">acount()</span></code></p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> にマッチするデータベース内のオブジェクトの数を整数で返します。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Returns the total number of entries in the database.</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n<span class=\"c1\"># Returns the number of entries whose headline contains &#39;Lennon&#39;</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">headline__contains</span><span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code> 呼び出しは裏で <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span> <span class=\"pre\">COUNT(*)</span></code> を実行するので、すべてのレコードを Python オブジェクトに読み込んで、その結果に対して <code class=\"docutils literal notranslate\"><span class=\"pre\">len()</span></code> を呼び出すのではなく、常に <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code> を使うべきです（オブジェクトをメモリに読み込む必要がある場合は別です、その場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">len()</span></code> の方が高速です）。</p>\n<p>もし <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> に含まれるアイテムの数が必要で、かつそこからモデルインスタンスを取得する場合 (たとえば、それをイテレートする場合) は、おそらく <code class=\"docutils literal notranslate\"><span class=\"pre\">len(queryset)</span></code> を使用する方が効率的でしょう。<code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code> のように余分なデータベースクエリが発生することがないからです。</p>\n<p>クエリセットがすでに完全に取得されている場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code> は余計なデータベースクエリを実行するのではなく、その長さを使用します。</p>\n</section>\n<section id=\"in-bulk\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">in_bulk()</span></code><a class=\"heading-anchor\" href=\"#in-bulk\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.in_bulk\">\n<span class=\"sig-name descname\"><span class=\"pre\">in_bulk</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">id_list</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">field_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'pk'</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.in_bulk\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.ain_bulk\">\n<span class=\"sig-name descname\"><span class=\"pre\">ain_bulk</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">id_list</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">field_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'pk'</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.ain_bulk\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">ain_bulk()</span></code></p>\n<p>フィールド値のリスト (<code class=\"docutils literal notranslate\"><span class=\"pre\">id_list</span></code>) とそれらの値の <code class=\"docutils literal notranslate\"><span class=\"pre\">field_name</span></code> を受け取り、各値を与えられたフィールド値を持つオブジェクトのインスタンスにマッピングした辞書を返します。 <a class=\"reference internal\" href=\"/ja/6.0/ref/exceptions/#django.core.exceptions.ObjectDoesNotExist\" title=\"django.core.exceptions.ObjectDoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">django.core.exceptions.ObjectDoesNotExist</span></code></a> 例外が <code class=\"docutils literal notranslate\"><span class=\"pre\">in_bulk</span></code> によって発生することはありません。つまり、インスタンスにマッチしない <code class=\"docutils literal notranslate\"><span class=\"pre\">id_list</span></code> 値は無視されます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">id_list</span></code> が指定されなかった場合、クエリセット内の全てのオブジェクトが返されます。フィールド名 <code class=\"docutils literal notranslate\"><span class=\"pre\">field_name</span></code> は一意なフィールドか、(<a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.distinct\" title=\"django.db.models.query.QuerySet.distinct\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">distinct()</span></code></a> で指定されたフィールドが一つしかない場合は) 区別されたフィールドでなければなりません。デフォルトは主キーです。</p>\n<p>例:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">in_bulk</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n<span class=\"go\">{1: &lt;Blog: Beatles Blog&gt;}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">in_bulk</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">])</span>\n<span class=\"go\">{1: &lt;Blog: Beatles Blog&gt;, 2: &lt;Blog: Cheddar Talk&gt;}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">in_bulk</span><span class=\"p\">([])</span>\n<span class=\"go\">{}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">in_bulk</span><span class=\"p\">()</span>\n<span class=\"go\">{1: &lt;Blog: Beatles Blog&gt;, 2: &lt;Blog: Cheddar Talk&gt;, 3: &lt;Blog: Django Weblog&gt;}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">in_bulk</span><span class=\"p\">([</span><span class=\"s2\">&quot;beatles_blog&quot;</span><span class=\"p\">],</span> <span class=\"n\">field_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;slug&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">{&#39;beatles_blog&#39;: &lt;Blog: Beatles Blog&gt;}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">distinct</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">in_bulk</span><span class=\"p\">(</span><span class=\"n\">field_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">{&#39;Beatles Blog&#39;: &lt;Blog: Beatles Blog&gt;, &#39;Cheddar Talk&#39;: &lt;Blog: Cheddar Talk&gt;, &#39;Django Weblog&#39;: &lt;Blog: Django Weblog&gt;}</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">in_bulk()</span></code> に空のリストを渡すと、空の辞書が返されます。</p>\n</section>\n<section id=\"iterator\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">iterator()</span></code><a class=\"heading-anchor\" href=\"#iterator\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.iterator\">\n<span class=\"sig-name descname\"><span class=\"pre\">iterator</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">chunk_size</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.iterator\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.aiterator\">\n<span class=\"sig-name descname\"><span class=\"pre\">aiterator</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">chunk_size</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.aiterator\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aiterator()</span></code></p>\n<p>( クエリを実行して ) <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> を評価し、その結果に対するイテレータ (<span class=\"target\" id=\"index-9\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0234/\"><strong>PEP 234</strong></a> を参照) を返します。非同期バージョンの <code class=\"docutils literal notranslate\"><span class=\"pre\">aiterator</span></code> を呼び出した場合は、非同期イテレータ (<span class=\"target\" id=\"index-10\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0492/\"><strong>PEP 492</strong></a> を参照) を返します。</p>\n<p>A <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> typically caches its results internally so that repeated\nevaluations do not result in additional queries. In contrast, <code class=\"docutils literal notranslate\"><span class=\"pre\">iterator()</span></code>\nwill read results directly, without doing any caching at the <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>\nlevel. For a <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> which returns a large number of objects that you\nonly need to access once, this can result in better performance and a\nsignificant reduction in memory.</p>\n<p>すでに評価された <code class=\"docutils literal notranslate\"><span class=\"pre\">クエリセット</span></code> に対して <code class=\"docutils literal notranslate\"><span class=\"pre\">iterator()</span></code> を使用すると、クエリを再度評価することになるので注意してください。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">chunk_size</span></code> が与えられている限り、 <code class=\"docutils literal notranslate\"><span class=\"pre\">iterator()</span></code> は以前の <code class=\"docutils literal notranslate\"><span class=\"pre\">prefetch_related()</span></code> の呼び出しと互換性があります。より大きな値を指定すると、より少ないクエリでプリフェッチを行う必要がありますが、その代償としてメモリの使用量が大きくなります。</p>\n<p>データベースによっては(例えばOracleや <a class=\"reference external\" href=\"https://www.sqlite.org/limits.html#max_variable_number\">SQLite</a> )、SQLの <code class=\"docutils literal notranslate\"><span class=\"pre\">IN</span></code> 句の最大項数が制限されている場合があります。そのため、この制限値以下の値を使用する必要があります。(特に、2つ以上のリレーションにまたがってプリフェッチを行う場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">chunk_size</span></code> は、プリフェッチされた各リレーションに対して予測される結果の数が制限を下回る程度に小さくする必要があります)。</p>\n<p>クエリセットがリレーション先のオブジェクトをプリフェッチしない限り、 <code class=\"docutils literal notranslate\"><span class=\"pre\">chunk_size</span></code> に何も値を指定しないと、 Django は暗黙のデフォルト値 2000 を使います。</p>\n<p>データベースのバックエンドによっては、クエリの結果は一度に読み込まれるか、サーバーサイドのカーソルを使ってデータベースからストリーミングされます。</p>\n<section id=\"with-server-side-cursors\">\n<h5>サーバーサイドカーソルとともに使う<a class=\"heading-anchor\" href=\"#with-server-side-cursors\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\n<p>Oracle と <a class=\"reference internal\" href=\"/ja/6.0/ref/databases/#postgresql-server-side-cursors\"><span class=\"std std-ref\">PostgreSQL</span></a> はサーバーサイドカーソルを使用して、結果セット全体をメモリに読み込むことなくデータベースから結果をストリームします。</p>\n<p>Oracle データベースドライバは常にサーバーサイドカーソルを使用します。</p>\n<p>サーバーサイドカーソルでは、<code class=\"docutils literal notranslate\"><span class=\"pre\">chunk_size</span></code> パラメータはデータベースドライバレベルでキャッシュする結果の数を指定します。より大きなチャンクをフェッチすることで、データベースドライバとデータベース間の往復回数を減らすことができます。</p>\n<p>PostgreSQLでは、サーバーサイドカーソルは <a class=\"reference internal\" href=\"/ja/6.0/ref/settings/#std-setting-DATABASE-DISABLE_SERVER_SIDE_CURSORS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DISABLE_SERVER_SIDE_CURSORS</span></code></a> 設定が <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> の場合のみ使用されます。トランザクションプーリングモードで構成された接続プーラを使用している場合は <a class=\"reference internal\" href=\"/ja/6.0/ref/databases/#transaction-pooling-server-side-cursors\"><span class=\"std std-ref\">トランザクションプールとサーバーサイドカーソル</span></a> を参照してください。サーバーサイドカーソルが無効な場合、動作はサーバーサイドカーソルをサポートしていないデータベースと同じです。</p>\n</section>\n<section id=\"without-server-side-cursors\">\n<h5>サーバーサイドカーソルなしで使う<a class=\"heading-anchor\" href=\"#without-server-side-cursors\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\n<p>MySQL は結果のストリーミングをサポートしていないので、Python データベースドライバは結果セット全体をメモリに読み込みます。結果セットはその後、データベースアダプタによって <span class=\"target\" id=\"index-11\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0249/\"><strong>PEP 249</strong></a> で定義されている <code class=\"docutils literal notranslate\"><span class=\"pre\">fetchmany()</span></code> メソッドを使用して Python の行オブジェクトに変換されます。</p>\n<p>SQLite は <code class=\"docutils literal notranslate\"><span class=\"pre\">fetchmany()</span></code> を使用してバッチで結果を取得できますが、SQLite は接続内のクエリ間の分離を提供していないため、イテレートするテーブルに書き込む際には注意が必要です。詳細は <a class=\"reference internal\" href=\"/ja/6.0/ref/databases/#sqlite-isolation\"><span class=\"std std-ref\">QuerySet.iterator() を使用する際の分離の問題</span></a> を参照してください。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">chunk_size</span></code> パラメータは Django がデータベースドライバから取得するバッチのサイ ズを制御します。バッチを大きくすると、データベースドライバとの通信のオーバヘッ ドが減りますが、その分メモリ消費量が少し増えます。</p>\n<p>クエリセットがリレーション先のオブジェクトをプリフェッチしない限り、 <code class=\"docutils literal notranslate\"><span class=\"pre\">chunk_size</span></code> に何も値を与えない場合、 Django は暗黙のデフォルト値である 2000 を使うことになります。この値は、 <a class=\"reference external\" href=\"https://www.postgresql.org/message-id/4D2F2C71.8080805%40dndg.it\">psycopg メーリングリスト</a> で計算された値です：</p>\n<blockquote>\n<div><p>テキストデータと数値データが混在した10～20列の行を想定すると、2000行で100KB以下のデータを取得することになります。これは、転送される行数と、ループが早期に終了した場合に破棄されるデータとの間の良い妥協点だと思われます。</p>\n</div></blockquote>\n</section>\n</section>\n<section id=\"latest\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">latest()</span></code><a class=\"heading-anchor\" href=\"#latest\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.latest\">\n<span class=\"sig-name descname\"><span class=\"pre\">latest</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">fields</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.latest\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.alatest\">\n<span class=\"sig-name descname\"><span class=\"pre\">alatest</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">fields</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.alatest\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">alatest()</span></code></p>\n<p>指定されたフィールドに基づいて、テーブル内の最新のオブジェクトを返します。</p>\n<p>この例では、 <code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></code> フィールドに従って、テーブル内の最新の <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> を返します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">latest</span><span class=\"p\">(</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>また、複数のフィールドから最新のものを選択することもできます。たとえば2つのエントリが同じ <code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></code> を持つ場合に、最も早い <code class=\"docutils literal notranslate\"><span class=\"pre\">expire_date</span></code> を持つ <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> を下記のように選択できます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">latest</span><span class=\"p\">(</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;-expire_date&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">'-expire_date'</span></code> の負の符号は、<code class=\"docutils literal notranslate\"><span class=\"pre\">expire_date</span></code> を <em>降順</em> でソートすることを意味します。 <code class=\"docutils literal notranslate\"><span class=\"pre\">latest()</span></code> は最後の結果を取得するので、 <code class=\"docutils literal notranslate\"><span class=\"pre\">expire_date</span></code> が最も古い <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> が選択されます。</p>\n<p>モデルの <a class=\"reference internal\" href=\"/ja/6.0/topics/db/models/#meta-options\"><span class=\"std std-ref\">Meta</span></a> が <a class=\"reference internal\" href=\"/ja/6.0/ref/models/options/#django.db.models.Options.get_latest_by\" title=\"django.db.models.Options.get_latest_by\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">get_latest_by</span></code></a> を指定している場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">earliest()</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">latest()</span></code> の引数を省略できます。 <a class=\"reference internal\" href=\"/ja/6.0/ref/models/options/#django.db.models.Options.get_latest_by\" title=\"django.db.models.Options.get_latest_by\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">get_latest_by</span></code></a> で指定されたフィールドがデフォルトで使用されます。</p>\n<p>Like <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get()</span></code></a>, <code class=\"docutils literal notranslate\"><span class=\"pre\">earliest()</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">latest()</span></code> raise\n<a class=\"reference internal\" href=\"/ja/6.0/ref/models/class/#django.db.models.Model.DoesNotExist\" title=\"django.db.models.Model.DoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">DoesNotExist</span></code></a> if there is no object with the\ngiven parameters.</p>\n<p>なお、<code class=\"docutils literal notranslate\"><span class=\"pre\">earliest()</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">latest()</span></code> は単に利便性と可読性のために存在しています。</p>\n<aside class=\"admonition-earliest-and-latest-may-return-instances-with-null-dates admonition\">\n<p class=\"admonition-title\"><code class=\"docutils literal notranslate\"><span class=\"pre\">earliest()</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">latest()</span></code> は null の日付を持つインスタンスを返すことがあります。</p>\n<p>ソートはデータベースに委譲されるため、異なるデータベースを使用している場合、NULL値を許可するフィールドの結果は異なる順序になる可能性があります。たとえば、PostgreSQLとMySQLはnull値をnull値でない値よりも上位にあるかのようにソートしますが、SQLiteはその逆です。</p>\n<p>下記のように、null 値をフィルタリングしたいこともあるでしょう:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__isnull</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">latest</span><span class=\"p\">(</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</aside>\n</section>\n<section id=\"earliest\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">earliest()</span></code><a class=\"heading-anchor\" href=\"#earliest\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.earliest\">\n<span class=\"sig-name descname\"><span class=\"pre\">earliest</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">fields</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.earliest\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.aearliest\">\n<span class=\"sig-name descname\"><span class=\"pre\">aearliest</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">fields</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.aearliest\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aearliest()</span></code></p>\n<p>向きが変わる以外は <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.latest\" title=\"django.db.models.query.QuerySet.latest\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">latest()</span></code></a> のように動作します。</p>\n</section>\n<section id=\"first\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">first()</span></code><a class=\"heading-anchor\" href=\"#first\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.first\">\n<span class=\"sig-name descname\"><span class=\"pre\">first</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.first\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.afirst\">\n<span class=\"sig-name descname\"><span class=\"pre\">afirst</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.afirst\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">afirst()</span></code></p>\n<p>クエリセットにマッチする最初のオブジェクトを返します。マッチするオブジェクトがない場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> を返します。<code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> にソートが定義されていない場合、クエリセットは自動的に主キーでソートされます。これは <a class=\"reference internal\" href=\"/ja/6.0/topics/db/aggregation/#aggregation-ordering-interaction\"><span class=\"std std-ref\">order_by() と一緒に使う</span></a> で説明されているように、アグリゲーション（集計）の結果に影響を与える可能性があります。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">Article</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;title&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">first()</span></code> は便利なメソッドであることに注意してください。以下のコードサンプルは上記の例と等価です:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">try</span><span class=\"p\">:</span>\n    <span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">Article</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;title&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n<span class=\"k\">except</span> <span class=\"ne\">IndexError</span><span class=\"p\">:</span>\n    <span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n</code></pre></div>\n</section>\n<section id=\"last\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">last()</span></code><a class=\"heading-anchor\" href=\"#last\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.last\">\n<span class=\"sig-name descname\"><span class=\"pre\">last</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.last\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.alast\">\n<span class=\"sig-name descname\"><span class=\"pre\">alast</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.alast\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">alast()</span></code></p>\n<p>Works like  <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.first\" title=\"django.db.models.query.QuerySet.first\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">first()</span></code></a>, but returns the last object in the queryset.</p>\n</section>\n<section id=\"aggregate\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">aggregate()</span></code><a class=\"heading-anchor\" href=\"#aggregate\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.aggregate\">\n<span class=\"sig-name descname\"><span class=\"pre\">aggregate</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">args</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.aggregate\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.aaggregate\">\n<span class=\"sig-name descname\"><span class=\"pre\">aaggregate</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">args</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.aaggregate\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aaggregate()</span></code></p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> に対して計算された集計値 (平均、合計など) の辞書を返します。 <code class=\"docutils literal notranslate\"><span class=\"pre\">aggregate()</span></code> の各引数は、返却される辞書に含まれる値を指定します。</p>\n<p>Django が提供する集計関数は以下の <a class=\"reference internal\" href=\"#id6\">Aggregation Functions</a> で説明されています。 集計は <a class=\"reference internal\" href=\"/ja/6.0/ref/models/expressions/\"><span class=\"doc\">クエリ式</span></a> でもあるので、集計を他の集計や値と組み合わせて複雑な集計を作ることができます。</p>\n<p>キーワード引数を使用して指定されたアグリゲーション（集計）は、アノテーションの名前としてキーワードを使用します。 無名の引数には、集計関数の名前と集約されるモデルフィールドに基づいて生成された名前が付けられます。複雑な集計では無名の引数を使用することはできず、エイリアスとしてキーワード引数を指定する必要があります。</p>\n<p>たとえば、ブログエントリーを扱う場合、下記のように、ブログエントリーを投稿した著者の数を知りたいことがあるでしょう:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Count</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;entry__authors&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">{&#39;entry__authors__count&#39;: 16}</span>\n</code></pre></div>\n<p>キーワード引数を使用して集計関数を指定すると、返される集計値の名前を制御できます:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span><span class=\"n\">number_of_authors</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;entry__authors&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">{&#39;number_of_authors&#39;: 16}</span>\n</code></pre></div>\n<p>集計処理についての深い議論については、 <a class=\"reference internal\" href=\"/ja/6.0/topics/db/aggregation/\"><span class=\"doc\">アグリゲーションについてのトピックガイド</span></a> を確認してください。</p>\n</section>\n<section id=\"exists\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">exists()</span></code><a class=\"heading-anchor\" href=\"#exists\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.exists\">\n<span class=\"sig-name descname\"><span class=\"pre\">exists</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.exists\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.aexists\">\n<span class=\"sig-name descname\"><span class=\"pre\">aexists</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.aexists\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aexists()</span></code></p>\n<p>戻り値は <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> に結果が含まれていれば <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を、含まれていなければ <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を返します。これは可能な限りシンプルで高速な方法でクエリを実行しようとしますが、通常の <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> クエリとほぼ同じクエリを実行します。</p>\n<p><a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.exists\" title=\"django.db.models.query.QuerySet.exists\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">exists()</span></code></a> は <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> に含まれるオブジェクトの存在に関連する検索、特に大きな <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> の検索に便利です。</p>\n<p>クエリセットに項目が含まれているかどうかを調べるには、次のようにします:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">if</span> <span class=\"n\">some_queryset</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">():</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;There is at least one object in some_queryset&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これは以下のコードより高速です:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">if</span> <span class=\"n\">some_queryset</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;There is at least one object in some_queryset&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>...しかしそれほど大きな差はありません（したがって、効果を感じるには大きなクエリセットが必要です）。</p>\n<p>さらに、<code class=\"docutils literal notranslate\"><span class=\"pre\">some_queryset</span></code> がまだ評価されていないが、いずれ評価されることがわかっている場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">some_queryset.exists()</span></code> を使用すると、結果を取得してから返されたかどうかをチェックする <code class=\"docutils literal notranslate\"><span class=\"pre\">bool(some_queryset)</span></code> を使用するよりも、全体的な作業量（存在チェックのためのクエリ1回と、後で結果を取得するためのクエリ1回）が増えます。</p>\n</section>\n<section id=\"contains\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">contains()</span></code><a class=\"heading-anchor\" href=\"#contains\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.contains\">\n<span class=\"sig-name descname\"><span class=\"pre\">contains</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.contains\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.acontains\">\n<span class=\"sig-name descname\"><span class=\"pre\">acontains</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.acontains\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">acontains()</span></code></p>\n<p><a class=\"reference internal\" href=\"#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> に <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> が含まれていれば <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を、含まれていなければ <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を返します。これは、可能な限りシンプルで高速な方法でクエリを実行しようとします。</p>\n<p><a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.contains\" title=\"django.db.models.query.QuerySet.contains\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">contains()</span></code></a> は、特に大きな <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> のコンテキストにおいて、 <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> 内のオブジェクトの所属関係をチェックするのに便利です。</p>\n<p>クエリセットに特定の項目が含まれているかどうかを確認するには、次のようにします:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">if</span> <span class=\"n\">some_queryset</span><span class=\"o\">.</span><span class=\"n\">contains</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;Entry contained in queryset&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これは、クエリセット全体を評価し、イテレートする必要がある以下の方法よりも高速です:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">if</span> <span class=\"n\">obj</span> <span class=\"ow\">in</span> <span class=\"n\">some_queryset</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;Entry contained in queryset&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.exists\" title=\"django.db.models.query.QuerySet.exists\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">exists()</span></code></a> と同様に、<code class=\"docutils literal notranslate\"><span class=\"pre\">some_queryset</span></code> がまだ評価されていないが、いずれ評価されることがわかっている場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">some_queryset.contains(obj)</span></code> を使用すると、追加のデータベースクエリを行うことになり、通常は全体的なパフォーマンスが低下します。</p>\n</section>\n<section id=\"update\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">update()</span></code><a class=\"heading-anchor\" href=\"#update\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.update\">\n<span class=\"sig-name descname\"><span class=\"pre\">update</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.update\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.aupdate\">\n<span class=\"sig-name descname\"><span class=\"pre\">aupdate</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.aupdate\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aupdate()</span></code></p>\n<p>指定したフィールドに対して SQL の UPDATE クエリを実行し、マッチした行の数を返します (一部の行が既に新しい値を持っている場合は、更新された行の数と一致しないことがあります)。</p>\n<p>たとえば、2010年に公開されたすべてのブログエントリーのコメントをオフにするには、次のようにします:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__year</span><span class=\"o\">=</span><span class=\"mi\">2010</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">comments_on</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>(これは <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> モデルに <code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">comments_on</span></code> フィールドがあると仮定しています)。</p>\n<p>複数のフィールドを更新できます。たとえば、以下のコードでは <code class=\"docutils literal notranslate\"><span class=\"pre\">comments_on</span></code> フィールドと <code class=\"docutils literal notranslate\"><span class=\"pre\">headline</span></code> フィールドを更新しています:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__year</span><span class=\"o\">=</span><span class=\"mi\">2010</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">comments_on</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;This is old&quot;</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">update()</span></code> メソッドは即座に適用されます。更新される <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> の唯一の制限は、モデルのメインテーブルのカラムのみを更新することができ、リレーション先のモデルのカラムを更新することはできないということです。たとえば、このようなことはできません:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">blog__name</span><span class=\"o\">=</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">)</span>  <span class=\"c1\"># Won&#39;t work!</span>\n</code></pre></div>\n<p>リレーション先のフィールドに基づくフィルタリングは可能です:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog__id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">comments_on</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>スライスが取られたり、それ以外の理由でこれ以上フィルタリングできなくなった <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> に対しては <code class=\"docutils literal notranslate\"><span class=\"pre\">update()</span></code> を呼び出すことはできません。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">update()</span></code> メソッドは、影響を受ける行の数を返します:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">64</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">comments_on</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"go\">1</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">slug</span><span class=\"o\">=</span><span class=\"s2\">&quot;nonexistent-slug&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">comments_on</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"go\">0</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__year</span><span class=\"o\">=</span><span class=\"mi\">2010</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">comments_on</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"go\">132</span>\n</code></pre></div>\n<p>レコードを更新するだけで、モデルオブジェクトに対して何もする必要がない場合、最も効率的なアプローチは、モデルオブジェクトをメモリに読み込むのではなく、 <code class=\"docutils literal notranslate\"><span class=\"pre\">update()</span></code> を呼び出すことです。たとえば、次のようにす書く代わりに、:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n<span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">comments_on</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n<span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>...次のように書きます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">comments_on</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>また、<code class=\"docutils literal notranslate\"><span class=\"pre\">update()</span></code> を使用することで、オブジェクトを読み込んでから <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> を呼び出すまでの短い間にデータベース内で何かが変更されてしまう競合状態を防ぐことができます。</p>\n<aside class=\"admonition-mysql-does-not-support-self-select-updates admonition\">\n<p class=\"admonition-title\">MySQL は自己を参照した更新処理をサポートしていません</p>\n<p>MySQL では、関連テーブルに対してフィルタリングしている場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet.update()</span></code> において単一の <code class=\"docutils literal notranslate\"><span class=\"pre\">UPDATE</span></code> ではなく <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span></code> に続けて <code class=\"docutils literal notranslate\"><span class=\"pre\">UPDATE</span></code> を実行することがあり、クエリ間で同時変更が発生すると競合状態を引き起こす可能性があります。原子性を確保するには、トランザクションを使用するか、MySQL ではそのようなフィルタ条件を避けることを検討してください。</p>\n</aside>\n<p>Finally, realize that <code class=\"docutils literal notranslate\"><span class=\"pre\">update()</span></code> does an update at the SQL level and, thus,\ndoes not call any <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> methods on your models, nor does it emit the\n<a class=\"reference internal\" href=\"/ja/6.0/ref/signals/#django.db.models.signals.pre_save\" title=\"django.db.models.signals.pre_save\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">pre_save</span></code></a> or\n<a class=\"reference internal\" href=\"/ja/6.0/ref/signals/#django.db.models.signals.post_save\" title=\"django.db.models.signals.post_save\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">post_save</span></code></a> signals (which are a consequence of\ncalling <a class=\"reference internal\" href=\"/ja/6.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Model.save()</span></code></a>). If you want to\nupdate a bunch of records for a model that has a custom\n<a class=\"reference internal\" href=\"/ja/6.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a> method, loop over them and call\n<a class=\"reference internal\" href=\"/ja/6.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a>, like this:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">for</span> <span class=\"n\">e</span> <span class=\"ow\">in</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__year</span><span class=\"o\">=</span><span class=\"mi\">2010</span><span class=\"p\">):</span>\n    <span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">comments_on</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<section id=\"ordered-queryset\">\n<h5>ソートされたクエリセット<a class=\"heading-anchor\" href=\"#ordered-queryset\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">order_by()</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">update()</span></code> の連結は MariaDB と MySQL でのみサポートされており、異なるデータベースでは無視されます。これは、一意なフィールドを指定された順序で矛盾なく更新する場合に便利です。たとえば次のようにします:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;-number&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">number</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;number&quot;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">order_by()</span></code> 句がアノテーション、継承されたフィールド、リレーション先のルックアップを含んでいる場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">order_by()</span></code> 句は無視されます。</p>\n</aside>\n</section>\n</section>\n<section id=\"delete\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">delete()</span></code><a class=\"heading-anchor\" href=\"#delete\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.delete\">\n<span class=\"sig-name descname\"><span class=\"pre\">delete</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.delete\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.adelete\">\n<span class=\"sig-name descname\"><span class=\"pre\">adelete</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.adelete\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">adelete()</span></code></p>\n<p><a class=\"reference internal\" href=\"#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> 内のすべての行に対して SQL による DELETE クエリを実行し、削除されたオブジェクトの数とオブジェクトの種類ごとの削除数を辞書として返します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">delete()</span></code> は即座に適用されます。スライスが取られたり、それ以外の理由でこれ以上フィルタリングできなくなった <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> に対しては <code class=\"docutils literal notranslate\"><span class=\"pre\">delete()</span></code> を呼び出すことはできません。</p>\n<p>たとえば、特定のブログ内のすべてのエントリを削除するには、:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n<span class=\"go\"># Delete all the entries belonging to this Blog.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog</span><span class=\"o\">=</span><span class=\"n\">b</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n<span class=\"go\">(4, {&#39;blog.Entry&#39;: 2, &#39;blog.Entry_authors&#39;: 2})</span>\n</code></pre></div>\n<p>デフォルトでは、 Django の <a class=\"reference internal\" href=\"/ja/6.0/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> は SQL の制約 <code class=\"docutils literal notranslate\"><span class=\"pre\">ON</span> <span class=\"pre\">DELETE</span> <span class=\"pre\">CASCADE</span></code> をエミュレートします。つまり、削除されるオブジェクトを指す外部キー を持つオブジェクトは一緒に削除されます。たとえば、次のようになります:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">blogs</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n\n<span class=\"go\"># This will delete all Blogs and all of their Entry objects.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">blogs</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n<span class=\"go\">(5, {&#39;blog.Blog&#39;: 1, &#39;blog.Entry&#39;: 2, &#39;blog.Entry_authors&#39;: 2})</span>\n</code></pre></div>\n<p>このカスケードの動作は、<a class=\"reference internal\" href=\"/ja/6.0/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> に対する <a class=\"reference internal\" href=\"/ja/6.0/ref/models/fields/#django.db.models.ForeignKey.on_delete\" title=\"django.db.models.ForeignKey.on_delete\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">on_delete</span></code></a> 属性によってカスタマイズできます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">delete()</span></code> メソッドは一括削除を行い、モデルの <code class=\"docutils literal notranslate\"><span class=\"pre\">delete()</span></code> メソッドを呼び出しません。しかし、削除されたオブジェクト (カスケード削除を含む) に対して <a class=\"reference internal\" href=\"/ja/6.0/ref/signals/#django.db.models.signals.pre_delete\" title=\"django.db.models.signals.pre_delete\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">pre_delete</span></code></a> と <a class=\"reference internal\" href=\"/ja/6.0/ref/signals/#django.db.models.signals.post_delete\" title=\"django.db.models.signals.post_delete\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">post_delete</span></code></a> シグナルを発行します。</p>\n<p>Django はシグナルを送ったり、カスケードを処理したりするために、オブジェクトをメモリにフェッチする必要があります。しかし、カスケードもシグナルもない場合、 Django は高速な経路をとり、メモリにフェッチせずにオブジェクトを削除するかもしれ ません。大きな削除の場合、メモリ使用量を大幅に減らすことができます。クエリの実行量も減ります。</p>\n<p><a class=\"reference internal\" href=\"/ja/6.0/ref/models/fields/#django.db.models.ForeignKey.on_delete\" title=\"django.db.models.ForeignKey.on_delete\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">on_delete</span></code></a> <code class=\"docutils literal notranslate\"><span class=\"pre\">DO_NOTHING</span></code> に設定されている外部キーは、削除の際に fast-path を取ることを防ぎません。</p>\n<p>オブジェクトの削除で生成されるクエリは、実装の詳細部分であり、変更される可能性があることに注意してください。</p>\n</section>\n<section id=\"as-manager\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">as_manager()</span></code><a class=\"heading-anchor\" href=\"#as-manager\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.as_manager\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">classmethod</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">as_manager</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.as_manager\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> のメソッドをコピーした <a class=\"reference internal\" href=\"/ja/6.0/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a> のインスタンスを返すクラスメソッドです。詳細は <a class=\"reference internal\" href=\"/ja/6.0/topics/db/managers/#create-manager-with-queryset-methods\"><span class=\"std std-ref\">QuerySet のメソッドで、マネージャを生成する</span></a> を参照してください。</p>\n<p>このセクションの他の項目とは異なり、クエリを実行しないため、非同期バージョンがないことに注意してください。</p>\n</section>\n<section id=\"explain\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">explain()</span></code><a class=\"heading-anchor\" href=\"#explain\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.explain\">\n<span class=\"sig-name descname\"><span class=\"pre\">explain</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">format</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.explain\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.query.QuerySet.aexplain\">\n<span class=\"sig-name descname\"><span class=\"pre\">aexplain</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">format</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.query.QuerySet.aexplain\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aexplain()</span></code></p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> の実行計画文字列を返します。この実行計画は、使用するインデックスや結合を含め、データベースがどのようにクエリを実行するかの詳細を示します。これらの詳細を知ることで、遅いクエリのパフォーマンスを向上させることができます。</p>\n<p>たとえば、PostgreSQLを使う場合:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s2\">&quot;My Blog&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">explain</span><span class=\"p\">())</span>\n<span class=\"go\">Seq Scan on blog  (cost=0.00..35.50 rows=10 width=12)</span>\n<span class=\"go\">  Filter: (title = &#39;My Blog&#39;::bpchar)</span>\n</code></pre></div>\n<p>出力はデータベースによって大きく異なります。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">explain()</span></code> は Oracle を除くすべての組み込みデータベースバックエンドでサポートされています。これは Oracle での実装が一筋縄ではいかないからです。</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">format</span></code> parameter changes the output format from the database's\ndefault, which is usually text-based. PostgreSQL supports <code class=\"docutils literal notranslate\"><span class=\"pre\">'TEXT'</span></code>,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">'JSON'</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">'YAML'</span></code>, and <code class=\"docutils literal notranslate\"><span class=\"pre\">'XML'</span></code> formats. MariaDB and MySQL support\n<code class=\"docutils literal notranslate\"><span class=\"pre\">'TEXT'</span></code> (also called <code class=\"docutils literal notranslate\"><span class=\"pre\">'TRADITIONAL'</span></code>) and <code class=\"docutils literal notranslate\"><span class=\"pre\">'JSON'</span></code> formats. MySQL\n8.0.16+ also supports an improved <code class=\"docutils literal notranslate\"><span class=\"pre\">'TREE'</span></code> format, which is similar to\nPostgreSQL's <code class=\"docutils literal notranslate\"><span class=\"pre\">'TEXT'</span></code> output and is used by default, if supported.</p>\n<p>データベースによっては、クエリに関する詳細な情報を返すフラグを受け付けるものがあります。これらのフラグをキーワード引数として渡してください。たとえば、PostgreSQLを使用している場合:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s2\">&quot;My Blog&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">explain</span><span class=\"p\">(</span><span class=\"n\">verbose</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">analyze</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">))</span>\n<span class=\"go\">Seq Scan on public.blog  (cost=0.00..35.50 rows=10 width=12) (actual time=0.004..0.004 rows=10 loops=1)</span>\n<span class=\"go\">  Output: id, title</span>\n<span class=\"go\">  Filter: (blog.title = &#39;My Blog&#39;::bpchar)</span>\n<span class=\"go\">Planning time: 0.064 ms</span>\n<span class=\"go\">Execution time: 0.058 ms</span>\n</code></pre></div>\n<p>データベースによっては、フラグによってクエリが実行され、データベースに悪影響を及ぼす可能性があります。たとえば、MariaDB、MySQL 8.0.18+、PostgreSQLでサポートされている <code class=\"docutils literal notranslate\"><span class=\"pre\">ANALYZE</span></code> フラグは、 <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span></code> クエリであっても、トリガがある場合や関数が呼び出された場合にデータを変更してしまう可能性があります。</p>\n<aside class=\"version-note version-changed\" data-version=\"5.2\">\n<p class=\"version-note-title\">Changed in Django 5.2</p><p>PostgreSQL 17 以降で <code class=\"docutils literal notranslate\"><span class=\"pre\">memory</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">serialize</span></code> オプションのサポートが追加されました。</p>\n</aside>\n</section>\n</section>\n<section id=\"field-lookups\">\n<span id=\"id4\"></span><h3><code class=\"docutils literal notranslate\"><span class=\"pre\">Field</span></code> ルックアップ<a class=\"heading-anchor\" href=\"#field-lookups\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Field lookups are how you specify the meat of an SQL <code class=\"docutils literal notranslate\"><span class=\"pre\">WHERE</span></code> clause. They're\nspecified as keyword arguments to the <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> methods <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">filter()</span></code></a>,\n<a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.exclude\" title=\"django.db.models.query.QuerySet.exclude\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">exclude()</span></code></a> and <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get()</span></code></a>.</p>\n<p>概要については <a class=\"reference internal\" href=\"/ja/6.0/topics/db/queries/#field-lookups-intro\"><span class=\"std std-ref\">モデルとデータベースクエリのドキュメント</span></a> を参照してください。</p>\n<p>Django の組み込みルックアップを以下に示します。モデルフィールドのために <a class=\"reference internal\" href=\"/ja/6.0/howto/custom-lookups/\"><span class=\"doc\">カスタムルックアップ</span></a> を書くこともできます。</p>\n<p>利便性のために、ルックアップタイプが指定されていない場合（ <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry.objects.get(id=14)</span></code> のように）、ルックアップタイプは <a class=\"reference internal\" href=\"#std-fieldlookup-exact\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">exact</span></code></a> とみなされます。</p>\n<section id=\"exact\">\n<span id=\"std-fieldlookup-exact\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">exact</span></code><a class=\"heading-anchor\" href=\"#exact\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>完全一致。比較に指定された値が <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> の場合、SQL の <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code> と解釈されます (詳細は <a class=\"reference internal\" href=\"#std-fieldlookup-isnull\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">isnull</span></code></a> を参照してください)。</p>\n<p>例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">id__exact</span><span class=\"o\">=</span><span class=\"mi\">14</span><span class=\"p\">)</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">id__exact</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これは下記のSQL文と等価です。</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">id</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">14</span><span class=\"p\">;</span>\n<span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">id</span><span class=\"w\"> </span><span class=\"k\">IS</span><span class=\"w\"> </span><span class=\"k\">NULL</span><span class=\"p\">;</span>\n</code></pre></div>\n<aside class=\"admonition-mysql-comparisons admonition\">\n<p class=\"admonition-title\">MySQL における比較</p>\n<p>MySQL では、データベースのテーブルの「照合順序」の設定で、<code class=\"docutils literal notranslate\"><span class=\"pre\">exact</span></code> 比較が大文字小文字を区別するかどうかを決めます。これはデータベースの設定で、 Django の設定ではありません。大文字小文字を区別して比較するように MySQL のテーブルを設定することは可能ですが、いくつかの トレードオフが伴います。これについては <a class=\"reference internal\" href=\"/ja/6.0/ref/databases/\"><span class=\"doc\">データベース</span></a> ドキュメントの <a class=\"reference internal\" href=\"/ja/6.0/ref/databases/#mysql-collation\"><span class=\"std std-ref\">照合順序のセクション</span></a> を参照してください。</p>\n</aside>\n</section>\n<section id=\"iexact\">\n<span id=\"std-fieldlookup-iexact\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">iexact</span></code><a class=\"heading-anchor\" href=\"#iexact\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>大文字小文字を区別しない完全一致。比較に指定された値が <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> の場合、SQL の <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code> と解釈されます (詳細は <a class=\"reference internal\" href=\"#std-fieldlookup-isnull\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">isnull</span></code></a> を参照してください)。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name__iexact</span><span class=\"o\">=</span><span class=\"s2\">&quot;beatles blog&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name__iexact</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これは下記のSQL文と等価です。</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"w\"> </span><span class=\"k\">ILIKE</span><span class=\"w\"> </span><span class=\"s1\">&#39;beatles blog&#39;</span><span class=\"p\">;</span>\n<span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"w\"> </span><span class=\"k\">IS</span><span class=\"w\"> </span><span class=\"k\">NULL</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>最初のクエリは <code class=\"docutils literal notranslate\"><span class=\"pre\">'Beatles</span> <span class=\"pre\">Blog'</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">'beatles</span> <span class=\"pre\">blog'</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">'BeAtLes</span> <span class=\"pre\">BLoG'</span></code> などにマッチすることに注意してください。</p>\n<aside class=\"admonition-sqlite-users admonition\">\n<p class=\"admonition-title\">SQLite ユーザーの場合</p>\n<p>SQLite バックエンドで非 ASCII 文字列を使用する場合は、文字列の比較に関する <a class=\"reference internal\" href=\"/ja/6.0/ref/databases/#sqlite-string-matching\"><span class=\"std std-ref\">データベースのノート</span></a> に注意してください。SQLiteは非ASCII文字列に対して大文字小文字を区別しないマッチングを行いません。</p>\n</aside>\n</section>\n<section id=\"std-fieldlookup-contains\">\n<span id=\"id5\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">contains</span></code><a class=\"heading-anchor\" href=\"#std-fieldlookup-contains\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>大文字小文字を区別し、文字列を含むかをチェックします。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">headline__contains</span><span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これらは SQL で言う下記と同等です:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">headline</span><span class=\"w\"> </span><span class=\"k\">LIKE</span><span class=\"w\"> </span><span class=\"s1\">&#39;%Lennon%&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>(正確なSQL構文はデータベースエンジンによって異なります）。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">'Lennon</span> <span class=\"pre\">honored</span> <span class=\"pre\">today'</span></code> という見出しにはマッチしますが、 <code class=\"docutils literal notranslate\"><span class=\"pre\">'lennon</span> <span class=\"pre\">honored</span> <span class=\"pre\">today'</span></code> という見出しにはマッチしないことに注意してください。</p>\n<aside class=\"admonition-sqlite-users admonition\">\n<p class=\"admonition-title\">SQLite ユーザーの場合</p>\n<p>SQLite は大文字小文字を区別する <code class=\"docutils literal notranslate\"><span class=\"pre\">LIKE</span></code> ステートメントをサポートしていません。詳細は <a class=\"reference internal\" href=\"/ja/6.0/ref/databases/#sqlite-string-matching\"><span class=\"std std-ref\">データベースに関する注意事項</span></a> を参照してください。</p>\n</aside>\n</section>\n<section id=\"icontains\">\n<span id=\"std-fieldlookup-icontains\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">icontains</span></code><a class=\"heading-anchor\" href=\"#icontains\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>大文字小文字を区別せずに文字列を含むかをチェックします。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">headline__icontains</span><span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これらは SQL で言う下記と同等です:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">headline</span><span class=\"w\"> </span><span class=\"k\">ILIKE</span><span class=\"w\"> </span><span class=\"s1\">&#39;%Lennon%&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>(正確なSQL構文はデータベースエンジンによって異なります）。</p>\n<aside class=\"admonition-sqlite-users admonition\">\n<p class=\"admonition-title\">SQLite ユーザーの場合</p>\n<p>SQLite バックエンドで非 ASCII 文字列を使用する場合は、文字列の比較に関する <a class=\"reference internal\" href=\"/ja/6.0/ref/databases/#sqlite-string-matching\"><span class=\"std std-ref\">データベースに関する注意事項</span></a> に注意してください。</p>\n</aside>\n</section>\n<section id=\"in\">\n<span id=\"std-fieldlookup-in\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code><a class=\"heading-anchor\" href=\"#in\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>指定されたイテラブル（多くの場合、リスト、タプル、クエリセット）内に含まれるかをチェックします。あまり使われませんが、（イテラブルである）文字列は使用可能です。</p>\n<p>例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">id__in</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">])</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">headline__in</span><span class=\"o\">=</span><span class=\"s2\">&quot;abc&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これは下記のSQL文と等価です。</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">id</span><span class=\"w\"> </span><span class=\"k\">IN</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"p\">);</span>\n<span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">headline</span><span class=\"w\"> </span><span class=\"k\">IN</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s1\">&#39;b&#39;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s1\">&#39;c&#39;</span><span class=\"p\">);</span>\n</code></pre></div>\n<p>リテラル値のリストを提供する代わりに、クエリセットを使用して以下のように値のリストを動的に評価することもできます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">inner_qs</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__contains</span><span class=\"o\">=</span><span class=\"s2\">&quot;Cheddar&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">entries</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog__in</span><span class=\"o\">=</span><span class=\"n\">inner_qs</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>このクエリセットは下記のようなサブクエリ内の SELECT 文として評価されます:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">blog</span><span class=\"p\">.</span><span class=\"n\">id</span><span class=\"w\"> </span><span class=\"k\">IN</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"n\">id</span><span class=\"w\"> </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">NAME</span><span class=\"w\"> </span><span class=\"k\">LIKE</span><span class=\"w\"> </span><span class=\"s1\">&#39;%Cheddar%&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>もし <code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">values_list()</span></code> の結果の <code class=\"docutils literal notranslate\"><span class=\"pre\">クエリセット</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">__in</span></code> ルックアップの値として渡す場合は、結果の中の1つのフィールドだけを抽出するようにする必要があります。たとえば、次のようにします（ブログ名でフィルタリングする場合）:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">inner_qs</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__contains</span><span class=\"o\">=</span><span class=\"s2\">&quot;Ch&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">entries</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog__name__in</span><span class=\"o\">=</span><span class=\"n\">inner_qs</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>下記の例では例外が発生します。内側のクエリは2つのフィールド値を抽出しようとしているからです:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Bad code! Will raise a TypeError.</span>\n<span class=\"n\">inner_qs</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__contains</span><span class=\"o\">=</span><span class=\"s2\">&quot;Ch&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;id&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">entries</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog__name__in</span><span class=\"o\">=</span><span class=\"n\">inner_qs</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition-performance-considerations admonition\" id=\"nested-queries-performance\">\n<p class=\"admonition-title\">パフォーマンスに関する注意事項</p>\n<p>ネストされたクエリの使用には注意し、データベースサーバーのパフォーマンス特性を理解しましょう (疑わしい場合はベンチマークを使用しましょう！)。データベースバックエンドによっては、特に MySQL はネストされたクエリをあまり最適化しません。そのような場合は、値のリストを抽出してから 2 番目のクエリに渡すほうが効率的です。つまり、1つのクエリではなく、下記のように2つのクエリを実行するのです。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">values</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__contains</span><span class=\"o\">=</span><span class=\"s2\">&quot;Cheddar&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">values_list</span><span class=\"p\">(</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">,</span> <span class=\"n\">flat</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"n\">entries</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog__in</span><span class=\"o\">=</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">values</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>最初のクエリを強制的に実行するために、Blog <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">list()</span></code> 呼び出しで囲んでいることに注意してください。これがないと、ネストされたクエリが実行されてしまうからです。これは <a class=\"reference internal\" href=\"/ja/6.0/topics/db/queries/#querysets-are-lazy\"><span class=\"std std-ref\">QuerySet は遅延評価される</span></a> ためです。</p>\n</aside>\n</section>\n<section id=\"gt\">\n<span id=\"std-fieldlookup-gt\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">gt</span></code><a class=\"heading-anchor\" href=\"#gt\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>～～より大きい（greater than）。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">id__gt</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これらは SQL で言う下記と同等です:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">id</span><span class=\"w\"> </span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"p\">;</span>\n</code></pre></div>\n</section>\n<section id=\"gte\">\n<span id=\"std-fieldlookup-gte\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">gte</span></code><a class=\"heading-anchor\" href=\"#gte\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>～～以上（greater than or equal to）。</p>\n</section>\n<section id=\"lt\">\n<span id=\"std-fieldlookup-lt\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">lt</span></code><a class=\"heading-anchor\" href=\"#lt\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>～～未満（less than）。</p>\n</section>\n<section id=\"lte\">\n<span id=\"std-fieldlookup-lte\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">lte</span></code><a class=\"heading-anchor\" href=\"#lte\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>～～以下（less than equal to）。</p>\n</section>\n<section id=\"startswith\">\n<span id=\"std-fieldlookup-startswith\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">startswith</span></code><a class=\"heading-anchor\" href=\"#startswith\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>大文字と小文字を区別して、指定された文字列から始まるかどうかをチェックします。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">headline__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これらは SQL で言う下記と同等です:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">headline</span><span class=\"w\"> </span><span class=\"k\">LIKE</span><span class=\"w\"> </span><span class=\"s1\">&#39;Lennon%&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>(正確なSQL構文はデータベースエンジンによって異なります）。</p>\n<p>SQLite は大文字小文字を区別する <code class=\"docutils literal notranslate\"><span class=\"pre\">LIKE</span></code> 文をサポートしていません。 SQLite では <code class=\"docutils literal notranslate\"><span class=\"pre\">startswith</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">istartswith</span></code> のように動作します。</p>\n</section>\n<section id=\"istartswith\">\n<span id=\"std-fieldlookup-istartswith\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">istartswith</span></code><a class=\"heading-anchor\" href=\"#istartswith\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>大文字と小文字を区別せず、指定された文字列から始まるかどうかをチェックします。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">headline__istartswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これらは SQL で言う下記と同等です:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">headline</span><span class=\"w\"> </span><span class=\"k\">ILIKE</span><span class=\"w\"> </span><span class=\"s1\">&#39;Lennon%&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>(正確なSQL構文はデータベースエンジンによって異なります）。</p>\n<aside class=\"admonition-sqlite-users admonition\">\n<p class=\"admonition-title\">SQLite ユーザーの場合</p>\n<p>SQLite バックエンドで非 ASCII 文字列を使用する場合は、文字列の比較に関する <a class=\"reference internal\" href=\"/ja/6.0/ref/databases/#sqlite-string-matching\"><span class=\"std std-ref\">データベースに関する注意事項</span></a> に注意してください。</p>\n</aside>\n</section>\n<section id=\"endswith\">\n<span id=\"std-fieldlookup-endswith\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">endswith</span></code><a class=\"heading-anchor\" href=\"#endswith\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>大文字と小文字を区別して、指定された文字列で終わるかどうかをチェックします。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">headline__endswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これらは SQL で言う下記と同等です:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">headline</span><span class=\"w\"> </span><span class=\"k\">LIKE</span><span class=\"w\"> </span><span class=\"s1\">&#39;%Lennon&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>(正確なSQL構文はデータベースエンジンによって異なります）。</p>\n<aside class=\"admonition-sqlite-users admonition\">\n<p class=\"admonition-title\">SQLite ユーザーの場合</p>\n<p>SQLite は大文字小文字を区別する <code class=\"docutils literal notranslate\"><span class=\"pre\">LIKE</span></code> 文をサポートしていません。 <code class=\"docutils literal notranslate\"><span class=\"pre\">endswith</span></code> は SQLite の <code class=\"docutils literal notranslate\"><span class=\"pre\">iendswith</span></code> のように動作します。詳しくは <a class=\"reference internal\" href=\"/ja/6.0/ref/databases/#sqlite-string-matching\"><span class=\"std std-ref\">データベースに関する注意事項</span></a> のドキュメントを参照してください。</p>\n</aside>\n</section>\n<section id=\"iendswith\">\n<span id=\"std-fieldlookup-iendswith\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">iendswith</span></code><a class=\"heading-anchor\" href=\"#iendswith\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>大文字と小文字を区別せず、指定された文字列で終わるかどうかをチェックします。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">headline__iendswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これらは SQL で言う下記と同等です:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">headline</span><span class=\"w\"> </span><span class=\"k\">ILIKE</span><span class=\"w\"> </span><span class=\"s1\">&#39;%Lennon&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>(正確なSQL構文はデータベースエンジンによって異なります）。</p>\n<aside class=\"admonition-sqlite-users admonition\">\n<p class=\"admonition-title\">SQLite ユーザーの場合</p>\n<p>SQLite バックエンドで非 ASCII 文字列を使用する場合は、文字列の比較に関する <a class=\"reference internal\" href=\"/ja/6.0/ref/databases/#sqlite-string-matching\"><span class=\"std std-ref\">データベースに関する注意事項</span></a> に注意してください。</p>\n</aside>\n</section>\n<section id=\"range\">\n<span id=\"std-fieldlookup-range\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">range</span></code><a class=\"heading-anchor\" href=\"#range\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>範囲のチェック（～～を含む）。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">datetime</span>\n\n<span class=\"n\">start_date</span> <span class=\"o\">=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"n\">end_date</span> <span class=\"o\">=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">31</span><span class=\"p\">)</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__range</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">start_date</span><span class=\"p\">,</span> <span class=\"n\">end_date</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>これらは SQL で言う下記と同等です:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">pub_date</span><span class=\"w\"> </span><span class=\"k\">BETWEEN</span><span class=\"w\"> </span><span class=\"s1\">&#39;2005-01-01&#39;</span><span class=\"w\"> </span><span class=\"k\">and</span><span class=\"w\"> </span><span class=\"s1\">&#39;2005-03-31&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">range</span></code> は SQL で <code class=\"docutils literal notranslate\"><span class=\"pre\">BETWEEN</span></code> が使えるところならどこでも使えます。日付、数字、そして文字でも使えます。</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>日付で <code class=\"docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></code> をフィルタリングすると、最終日のアイテムは含まれません。もし <code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></code> であった場合、上記の式はこのようなSQLになります:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">pub_date</span><span class=\"w\"> </span><span class=\"k\">BETWEEN</span><span class=\"w\"> </span><span class=\"s1\">&#39;2005-01-01 00:00:00&#39;</span><span class=\"w\"> </span><span class=\"k\">and</span><span class=\"w\"> </span><span class=\"s1\">&#39;2005-03-31 00:00:00&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>一般的に言って、日付と日時を混在させることはできません。</p>\n</aside>\n</section>\n<section id=\"date\">\n<span id=\"std-fieldlookup-date\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">date</span></code><a class=\"heading-anchor\" href=\"#date\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>datetime フィールドの値を date としてキャストします。追加のフィールドルックアップを連結できます。 date 値を取ります。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__date</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">))</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__date__gt</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>(このルックアップに等価なSQLの例はありません。これは、関連するクエリの実装がデータベースエンジンによって異なるためです)。</p>\n<p><a class=\"reference internal\" href=\"/ja/6.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> の場合、フィールドはフィルタリングの前にカレントタイムゾーンに変換されます。これには <a class=\"reference internal\" href=\"#database-time-zone-definitions\"><span class=\"std std-ref\">データベースのタイムゾーン定義</span></a> が必要です。</p>\n</section>\n<section id=\"year\">\n<span id=\"std-fieldlookup-year\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">year</span></code><a class=\"heading-anchor\" href=\"#year\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>日付フィールドとdatetimeフィールドにおける、&quot;年&quot; の完全一致。追加のフィールドルックアップを連結できます。年を整数で指定します。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__year</span><span class=\"o\">=</span><span class=\"mi\">2005</span><span class=\"p\">)</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__year__gte</span><span class=\"o\">=</span><span class=\"mi\">2005</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これらは SQL で言う下記と同等です:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">pub_date</span><span class=\"w\"> </span><span class=\"k\">BETWEEN</span><span class=\"w\"> </span><span class=\"s1\">&#39;2005-01-01&#39;</span><span class=\"w\"> </span><span class=\"k\">AND</span><span class=\"w\"> </span><span class=\"s1\">&#39;2005-12-31&#39;</span><span class=\"p\">;</span>\n<span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">pub_date</span><span class=\"w\"> </span><span class=\"o\">&gt;=</span><span class=\"w\"> </span><span class=\"s1\">&#39;2005-01-01&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>(正確なSQL構文はデータベースエンジンによって異なります）。</p>\n<p><a class=\"reference internal\" href=\"/ja/6.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> の場合、日付フィールドはフィルタリングの前にカレントタイムゾーンに変換されます。これにはデータベースの <a class=\"reference internal\" href=\"#database-time-zone-definitions\"><span class=\"std std-ref\">タイムゾーン定義</span></a> が必要です。</p>\n</section>\n<section id=\"iso-year\">\n<span id=\"std-fieldlookup-iso_year\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">iso_year</span></code><a class=\"heading-anchor\" href=\"#iso-year\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>日付フィールドとdatetimeフィールドにおける、ISO 8601の週番号と年との完全一致。追加のフィールドルックアップを連結できます。年を整数で指定します。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__iso_year</span><span class=\"o\">=</span><span class=\"mi\">2005</span><span class=\"p\">)</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__iso_year__gte</span><span class=\"o\">=</span><span class=\"mi\">2005</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>(正確なSQL構文はデータベースエンジンによって異なります）。</p>\n<p><a class=\"reference internal\" href=\"/ja/6.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> の場合、日付フィールドはフィルタリングの前にカレントタイムゾーンに変換されます。これにはデータベースの <a class=\"reference internal\" href=\"#database-time-zone-definitions\"><span class=\"std std-ref\">タイムゾーン定義</span></a> が必要です。</p>\n</section>\n<section id=\"month\">\n<span id=\"std-fieldlookup-month\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">month</span></code><a class=\"heading-anchor\" href=\"#month\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>日付フィールドおよびdatetimeフィールドにおける、&quot;月&quot; の完全一致。追加のフィールドルックアップを連結できます。1 (1月) から 12 (12月) までの整数を指定します。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__month</span><span class=\"o\">=</span><span class=\"mi\">12</span><span class=\"p\">)</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__month__gte</span><span class=\"o\">=</span><span class=\"mi\">6</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これらは SQL で言う下記と同等です:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"k\">EXTRACT</span><span class=\"p\">(</span><span class=\"s1\">&#39;month&#39;</span><span class=\"w\"> </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"n\">pub_date</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s1\">&#39;12&#39;</span><span class=\"p\">;</span>\n<span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"k\">EXTRACT</span><span class=\"p\">(</span><span class=\"s1\">&#39;month&#39;</span><span class=\"w\"> </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"n\">pub_date</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">&gt;=</span><span class=\"w\"> </span><span class=\"s1\">&#39;6&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>(正確なSQL構文はデータベースエンジンによって異なります）。</p>\n<p><a class=\"reference internal\" href=\"/ja/6.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> の場合、日付フィールドはフィルタリングの前にカレントタイムゾーンに変換されます。これにはデータベースの <a class=\"reference internal\" href=\"#database-time-zone-definitions\"><span class=\"std std-ref\">タイムゾーン定義</span></a> が必要です。</p>\n</section>\n<section id=\"day\">\n<span id=\"std-fieldlookup-day\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">day</span></code><a class=\"heading-anchor\" href=\"#day\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>日付フィールドとdatetimeフィールドにおける、&quot;日&quot; の完全一致。追加のフィールドルックアップを連結できます。日を整数で指定します。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__day</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__day__gte</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これらは SQL で言う下記と同等です:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"k\">EXTRACT</span><span class=\"p\">(</span><span class=\"s1\">&#39;day&#39;</span><span class=\"w\"> </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"n\">pub_date</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s1\">&#39;3&#39;</span><span class=\"p\">;</span>\n<span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"k\">EXTRACT</span><span class=\"p\">(</span><span class=\"s1\">&#39;day&#39;</span><span class=\"w\"> </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"n\">pub_date</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">&gt;=</span><span class=\"w\"> </span><span class=\"s1\">&#39;3&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>(正確なSQL構文はデータベースエンジンによって異なります）。</p>\n<p>これは、1 月 3 日、7 月 3 日など、pub_date が月の 3 日目のレコードに一致します。</p>\n<p><a class=\"reference internal\" href=\"/ja/6.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> の場合、日付フィールドはフィルタリングの前にカレントタイムゾーンに変換されます。これにはデータベースの <a class=\"reference internal\" href=\"#database-time-zone-definitions\"><span class=\"std std-ref\">タイムゾーン定義</span></a> が必要です。</p>\n</section>\n<section id=\"week\">\n<span id=\"std-fieldlookup-week\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">week</span></code><a class=\"heading-anchor\" href=\"#week\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>日付フィールドおよびdatetimeフィールドにおける、 <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/ISO-8601\">ISO-8601</a> に従った週番号 (1～52または53) を返します。すなわち、週は月曜日から始まり、最初の週にはその年の最初の木曜日が含まれます。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__week</span><span class=\"o\">=</span><span class=\"mi\">52</span><span class=\"p\">)</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__week__gte</span><span class=\"o\">=</span><span class=\"mi\">32</span><span class=\"p\">,</span> <span class=\"n\">pub_date__week__lte</span><span class=\"o\">=</span><span class=\"mi\">38</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>(このルックアップに等価なSQLの例はありません。これは、関連するクエリの実装がデータベースエンジンによって異なるためです)。</p>\n<p><a class=\"reference internal\" href=\"/ja/6.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> の場合、日付フィールドはフィルタリングの前にカレントタイムゾーンに変換されます。これにはデータベースの <a class=\"reference internal\" href=\"#database-time-zone-definitions\"><span class=\"std std-ref\">タイムゾーン定義</span></a> が必要です。</p>\n</section>\n<section id=\"week-day\">\n<span id=\"std-fieldlookup-week_day\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">week_day</span></code><a class=\"heading-anchor\" href=\"#week-day\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>日付フィールドとdatetimeフィールドにおける &quot;曜日&quot; の一致。追加のフィールドルックアップを連結できます。</p>\n<p>1 (日曜日) から 7 (土曜日) までの曜日を表す整数値を指定します。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__week_day</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__week_day__gte</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>(このルックアップに等価なSQLの例はありません。これは、関連するクエリの実装がデータベースエンジンによって異なるためです)。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></code> が月曜日(週の2日目)のレコードは、月や年に関係なくマッチすることに注意してください。 週の曜日のインデックスは1日目が日曜日、7日目が土曜日です。</p>\n<p><a class=\"reference internal\" href=\"/ja/6.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> の場合、日付フィールドはフィルタリングの前にカレントタイムゾーンに変換されます。これにはデータベースの <a class=\"reference internal\" href=\"#database-time-zone-definitions\"><span class=\"std std-ref\">タイムゾーン定義</span></a> が必要です。</p>\n</section>\n<section id=\"iso-week-day\">\n<span id=\"std-fieldlookup-iso_week_day\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">iso_week_day</span></code><a class=\"heading-anchor\" href=\"#iso-week-day\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>日付フィールドおよび datetime フィールドにおける、ISO 8601 曜日との完全一致。追加のフィールドルックアップを連結できます。</p>\n<p>1(月曜日)から7(日曜日)までの曜日を表す整数値を取ります。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__iso_week_day</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__iso_week_day__gte</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>(このルックアップに等価なSQLの例はありません。これは、関連するクエリの実装がデータベースエンジンによって異なるためです)。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></code> が月曜日(週の1日目)のレコードは、月や年に関係なくマッチすることに注意してください。週の曜日のインデックスは1日目が月曜日、7日目が日曜日です。</p>\n<p><a class=\"reference internal\" href=\"/ja/6.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> の場合、日付フィールドはフィルタリングの前にカレントタイムゾーンに変換されます。これにはデータベースの <a class=\"reference internal\" href=\"#database-time-zone-definitions\"><span class=\"std std-ref\">タイムゾーン定義</span></a> が必要です。</p>\n</section>\n<section id=\"quarter\">\n<span id=\"std-fieldlookup-quarter\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">quarter</span></code><a class=\"heading-anchor\" href=\"#quarter\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>日付および datetime フィールドにおける、&quot;四半期&quot; の一致。追加のフィールドルックアップを連結できます。年の四半期を表す 1 から 4 までの整数値を指定します。</p>\n<p>第2四半期（4月1日から6月30日まで）のエントリーを検索する例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__quarter</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>(このルックアップに等価なSQLの例はありません。これは、関連するクエリの実装がデータベースエンジンによって異なるためです)。</p>\n<p><a class=\"reference internal\" href=\"/ja/6.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> の場合、日付フィールドはフィルタリングの前にカレントタイムゾーンに変換されます。これにはデータベースの <a class=\"reference internal\" href=\"#database-time-zone-definitions\"><span class=\"std std-ref\">タイムゾーン定義</span></a> が必要です。</p>\n</section>\n<section id=\"time\">\n<span id=\"std-fieldlookup-time\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">time</span></code><a class=\"heading-anchor\" href=\"#time\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>datetime フィールドの場合、値を time としてキャストします。追加のフィールドルックアップを連結できます。 <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.time\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime.time</span></code></a> 値を取ります。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__time</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">(</span><span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">))</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__time__range</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">(</span><span class=\"mi\">8</span><span class=\"p\">),</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">(</span><span class=\"mi\">17</span><span class=\"p\">)))</span>\n</code></pre></div>\n<p>(このルックアップに等価なSQLの例はありません。これは、関連するクエリの実装がデータベースエンジンによって異なるためです)。</p>\n<p><a class=\"reference internal\" href=\"/ja/6.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> の場合、フィールドはフィルタリングの前にカレントタイムゾーンに変換されます。これには <a class=\"reference internal\" href=\"#database-time-zone-definitions\"><span class=\"std std-ref\">データベースのタイムゾーン定義</span></a> が必要です。</p>\n</section>\n<section id=\"hour\">\n<span id=\"std-fieldlookup-hour\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">hour</span></code><a class=\"heading-anchor\" href=\"#hour\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>datetimeフィールドとtimeフィールドにおける、&quot;時（hour）&quot; の完全一致。追加のフィールドルックアップを連結できます。0 から 23 までの整数を指定します。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Event</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">timestamp__hour</span><span class=\"o\">=</span><span class=\"mi\">23</span><span class=\"p\">)</span>\n<span class=\"n\">Event</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">time__hour</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n<span class=\"n\">Event</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">timestamp__hour__gte</span><span class=\"o\">=</span><span class=\"mi\">12</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これらは SQL で言う下記と同等です:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"k\">EXTRACT</span><span class=\"p\">(</span><span class=\"s1\">&#39;hour&#39;</span><span class=\"w\"> </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"k\">timestamp</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s1\">&#39;23&#39;</span><span class=\"p\">;</span>\n<span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"k\">EXTRACT</span><span class=\"p\">(</span><span class=\"s1\">&#39;hour&#39;</span><span class=\"w\"> </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"k\">time</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s1\">&#39;5&#39;</span><span class=\"p\">;</span>\n<span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"k\">EXTRACT</span><span class=\"p\">(</span><span class=\"s1\">&#39;hour&#39;</span><span class=\"w\"> </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"k\">timestamp</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">&gt;=</span><span class=\"w\"> </span><span class=\"s1\">&#39;12&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>(正確なSQL構文はデータベースエンジンによって異なります）。</p>\n<p><a class=\"reference internal\" href=\"/ja/6.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> の場合、日付フィールドはフィルタリングの前にカレントタイムゾーンに変換されます。これにはデータベースの <a class=\"reference internal\" href=\"#database-time-zone-definitions\"><span class=\"std std-ref\">タイムゾーン定義</span></a> が必要です。</p>\n</section>\n<section id=\"minute\">\n<span id=\"std-fieldlookup-minute\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">minute</span></code><a class=\"heading-anchor\" href=\"#minute\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>datetime フィールドと time フィールドにおける、&quot;分&quot; の完全一致。追加のフィールドルックアップを連結できます。0 から 59 までの整数を指定します。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Event</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">timestamp__minute</span><span class=\"o\">=</span><span class=\"mi\">29</span><span class=\"p\">)</span>\n<span class=\"n\">Event</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">time__minute</span><span class=\"o\">=</span><span class=\"mi\">46</span><span class=\"p\">)</span>\n<span class=\"n\">Event</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">timestamp__minute__gte</span><span class=\"o\">=</span><span class=\"mi\">29</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これらは SQL で言う下記と同等です:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"k\">EXTRACT</span><span class=\"p\">(</span><span class=\"s1\">&#39;minute&#39;</span><span class=\"w\"> </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"k\">timestamp</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s1\">&#39;29&#39;</span><span class=\"p\">;</span>\n<span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"k\">EXTRACT</span><span class=\"p\">(</span><span class=\"s1\">&#39;minute&#39;</span><span class=\"w\"> </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"k\">time</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s1\">&#39;46&#39;</span><span class=\"p\">;</span>\n<span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"k\">EXTRACT</span><span class=\"p\">(</span><span class=\"s1\">&#39;minute&#39;</span><span class=\"w\"> </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"k\">timestamp</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">&gt;=</span><span class=\"w\"> </span><span class=\"s1\">&#39;29&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>(正確なSQL構文はデータベースエンジンによって異なります）。</p>\n<p><a class=\"reference internal\" href=\"/ja/6.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> の場合、日付フィールドはフィルタリングの前にカレントタイムゾーンに変換されます。これにはデータベースの <a class=\"reference internal\" href=\"#database-time-zone-definitions\"><span class=\"std std-ref\">タイムゾーン定義</span></a> が必要です。</p>\n</section>\n<section id=\"second\">\n<span id=\"std-fieldlookup-second\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">second</span></code><a class=\"heading-anchor\" href=\"#second\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>datetime および time フィールドにおける、&quot;秒&quot; の完全一致。追加のフィールドルックアップを連結できます。0 から 59 までの整数を指定します。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Event</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">timestamp__second</span><span class=\"o\">=</span><span class=\"mi\">31</span><span class=\"p\">)</span>\n<span class=\"n\">Event</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">time__second</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"n\">Event</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">timestamp__second__gte</span><span class=\"o\">=</span><span class=\"mi\">31</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これらは SQL で言う下記と同等です:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"k\">EXTRACT</span><span class=\"p\">(</span><span class=\"s1\">&#39;second&#39;</span><span class=\"w\"> </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"k\">timestamp</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s1\">&#39;31&#39;</span><span class=\"p\">;</span>\n<span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"k\">EXTRACT</span><span class=\"p\">(</span><span class=\"s1\">&#39;second&#39;</span><span class=\"w\"> </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"k\">time</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s1\">&#39;2&#39;</span><span class=\"p\">;</span>\n<span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"k\">EXTRACT</span><span class=\"p\">(</span><span class=\"s1\">&#39;second&#39;</span><span class=\"w\"> </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"k\">timestamp</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">&gt;=</span><span class=\"w\"> </span><span class=\"s1\">&#39;31&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>(正確なSQL構文はデータベースエンジンによって異なります）。</p>\n<p><a class=\"reference internal\" href=\"/ja/6.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> の場合、日付フィールドはフィルタリングの前にカレントタイムゾーンに変換されます。これにはデータベースの <a class=\"reference internal\" href=\"#database-time-zone-definitions\"><span class=\"std std-ref\">タイムゾーン定義</span></a> が必要です。</p>\n</section>\n<section id=\"isnull\">\n<span id=\"std-fieldlookup-isnull\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">isnull</span></code><a class=\"heading-anchor\" href=\"#isnull\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>&quot;True&quot; または &quot;False&quot; を受け取り、それぞれ <code class=\"docutils literal notranslate\"><span class=\"pre\">IS</span> <span class=\"pre\">NULL</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">IS</span> <span class=\"pre\">NOT</span> <span class=\"pre\">NULL</span></code> の SQL クエリに対応します。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__isnull</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これらは SQL で言う下記と同等です:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">pub_date</span><span class=\"w\"> </span><span class=\"k\">IS</span><span class=\"w\"> </span><span class=\"k\">NULL</span><span class=\"p\">;</span>\n</code></pre></div>\n</section>\n<section id=\"regex\">\n<span id=\"std-fieldlookup-regex\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">regex</span></code><a class=\"heading-anchor\" href=\"#regex\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>大文字小文字を区別する正規表現マッチ。</p>\n<p>正規表現の構文は、使用するデータベースバックエンドのものです。正規表現のサポートが組み込まれていないSQLiteの場合、この機能は(Pythonの)ユーザー定義REGEXP関数によって提供され、正規表現の構文はPythonの <code class=\"docutils literal notranslate\"><span class=\"pre\">re</span></code> モジュールのものとなります。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">title__regex</span><span class=\"o\">=</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^(An?|The) +&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これは下記のSQL文と等価です。</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">title</span><span class=\"w\"> </span><span class=\"n\">REGEXP</span><span class=\"w\"> </span><span class=\"nb\">BINARY</span><span class=\"w\"> </span><span class=\"s1\">&#39;^(An?|The) +&#39;</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">-- MySQL</span>\n\n<span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">REGEXP_LIKE</span><span class=\"p\">(</span><span class=\"n\">title</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s1\">&#39;^(An?|The) +&#39;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s1\">&#39;c&#39;</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">-- Oracle</span>\n\n<span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">title</span><span class=\"w\"> </span><span class=\"o\">~</span><span class=\"w\"> </span><span class=\"s1\">&#39;^(An?|The) +&#39;</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">-- PostgreSQL</span>\n\n<span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">title</span><span class=\"w\"> </span><span class=\"n\">REGEXP</span><span class=\"w\"> </span><span class=\"s1\">&#39;^(An?|The) +&#39;</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">-- SQLite</span>\n</code></pre></div>\n<p>正規表現の構文を渡す際には、生の文字列(例: <code class=\"docutils literal notranslate\"><span class=\"pre\">'foo'</span></code> の代わりに <code class=\"docutils literal notranslate\"><span class=\"pre\">r'foo'</span></code>) を使うことを推奨します。</p>\n</section>\n<section id=\"iregex\">\n<span id=\"std-fieldlookup-iregex\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">iregex</span></code><a class=\"heading-anchor\" href=\"#iregex\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>大文字小文字を区別しない正規表現マッチ。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">title__iregex</span><span class=\"o\">=</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^(an?|the) +&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これは下記のSQL文と等価です。</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">title</span><span class=\"w\"> </span><span class=\"n\">REGEXP</span><span class=\"w\"> </span><span class=\"s1\">&#39;^(an?|the) +&#39;</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">-- MySQL</span>\n\n<span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">REGEXP_LIKE</span><span class=\"p\">(</span><span class=\"n\">title</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s1\">&#39;^(an?|the) +&#39;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s1\">&#39;i&#39;</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">-- Oracle</span>\n\n<span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">title</span><span class=\"w\"> </span><span class=\"o\">~*</span><span class=\"w\"> </span><span class=\"s1\">&#39;^(an?|the) +&#39;</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">-- PostgreSQL</span>\n\n<span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">title</span><span class=\"w\"> </span><span class=\"n\">REGEXP</span><span class=\"w\"> </span><span class=\"s1\">&#39;(?i)^(an?|the) +&#39;</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">-- SQLite</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"aggregation-functions\">\n<span id=\"id6\"></span><h3>集計（Aggregation）関数<a class=\"heading-anchor\" href=\"#aggregation-functions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django は <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.models</span></code> モジュールで以下の集計関数を提供しています。これらの集計関数の使い方は <a class=\"reference internal\" href=\"/ja/6.0/topics/db/aggregation/\"><span class=\"doc\">アグリゲーション（集計）に関するトピックガイド</span></a> を参照してください。集計関数の作成方法については <a class=\"reference internal\" href=\"/ja/6.0/ref/models/expressions/#django.db.models.Aggregate\" title=\"django.db.models.Aggregate\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Aggregate</span></code></a> ドキュメント を参照してください。</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>SQLite は日付/時刻フィールドの集計をそのままでは扱えません。これは、 SQLite にはネイティブな日付/時刻フィールドが存在せず、Django は現在、テキストフィールドを使っ てこれらの機能をエミュレートしているからです。SQLite で日付/時刻フィールドの集計を使おうとすると、 <code class=\"docutils literal notranslate\"><span class=\"pre\">NotSupportedError</span></code> が発生します。</p>\n</aside>\n<aside class=\"admonition-empty-querysets-or-groups admonition\">\n<p class=\"admonition-title\">空のクエリセットやグループの場合</p>\n<p>集計関数は空の <code class=\"docutils literal notranslate\"><span class=\"pre\">クエリセット</span></code> やグループで使用すると <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> を返します。たとえば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">Sum</span></code> 集計関数は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> にエントリが含まれていない場合や、空ではない <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> に含まれる空のグループに対して、 <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> の代わりに <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> を返します。代わりに別の値を返すには、 <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> 引数を定義します。 <code class=\"docutils literal notranslate\"><span class=\"pre\">Count</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> 引数をサポートしていないため、 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> が空の場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> を返します。</p>\n</aside>\n<p>すべての集計に共通するパラメータは以下の通りです:</p>\n<section id=\"expressions\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">expressions</span></code><a class=\"heading-anchor\" href=\"#expressions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>モデル上のフィールド、フィールドのトランスフォーム、または <a class=\"reference internal\" href=\"/ja/6.0/ref/models/expressions/\"><span class=\"doc\">クエリ式</span></a> を参照する文字列です。</p>\n</section>\n<section id=\"output-field\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code><a class=\"heading-anchor\" href=\"#output-field\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>戻り値の <a class=\"reference internal\" href=\"/ja/6.0/ref/models/fields/\"><span class=\"doc\">モデルフィールド</span></a> を表すオプションの引数です。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>複数のフィールドタイプを組み合わせる場合、Django が <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> を決定できるのは、全てのフィールドタイプが同じ場合だけです。そうでない場合は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> を自分で指定しなければなりません。</p>\n</aside>\n</section>\n<section id=\"aggregate-filter\">\n<span id=\"id7\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">filter</span></code><a class=\"heading-anchor\" href=\"#aggregate-filter\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>オプションで、 <a class=\"reference internal\" href=\"#django.db.models.Q\" title=\"django.db.models.Q\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Q</span> <span class=\"pre\">オブジェクト</span></code></a> で、集計する行をフィルタリングします。</p>\n<p>たとえば <a class=\"reference internal\" href=\"/ja/6.0/ref/models/conditional-expressions/#conditional-aggregation\"><span class=\"std std-ref\">条件付きの集計</span></a> や <a class=\"reference internal\" href=\"/ja/6.0/topics/db/aggregation/#filtering-on-annotations\"><span class=\"std std-ref\">アノテーションのフィルタリング</span></a> を参照してください。</p>\n</section>\n<section id=\"default\">\n<span id=\"aggregate-default\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code><a class=\"heading-anchor\" href=\"#default\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>オプションの引数で、クエリセット（またはグループ化）にエントリがない場合にデフォルト値として使用する値を指定できます。</p>\n</section>\n<section id=\"id8\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">**extra</span></code><a class=\"heading-anchor\" href=\"#id8\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>集計によって生成されるSQLに追加のコンテキストを提供できるキーワード引数。</p>\n</section>\n<section id=\"anyvalue\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">AnyValue</span></code><a class=\"heading-anchor\" href=\"#anyvalue\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<aside class=\"version-note version-added\" data-version=\"6.0\">\n<p class=\"version-note-title\">New in Django 6.0</p></aside>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.AnyValue\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AnyValue</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expression</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">output_field</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">filter</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">default</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.AnyValue\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns an arbitrary value from the non-null input values.</p>\n<ul class=\"simple\">\n<li><p>Default alias: <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;field&gt;__anyvalue</span></code></p></li>\n<li><p>戻り値の型: 入力フィールドと同じ、または <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> が指定されている場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> を返します。クエリセットまたはグループ化が空の場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> が返されます。</p></li>\n</ul>\n<p>使用例:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get average rating for each year along with a sample headline</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># from that year.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">AnyValue</span><span class=\"p\">,</span> <span class=\"n\">Avg</span><span class=\"p\">,</span> <span class=\"n\">F</span><span class=\"p\">,</span> <span class=\"n\">Q</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">sample_headline</span> <span class=\"o\">=</span> <span class=\"n\">AnyValue</span><span class=\"p\">(</span><span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">pub_year</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;pub_date__year&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">avg_rating</span><span class=\"o\">=</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"s2\">&quot;rating&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"n\">sample_headline</span><span class=\"o\">=</span><span class=\"n\">sample_headline</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get a sample headline from each year with rating greater than 4.5.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">sample_headline</span> <span class=\"o\">=</span> <span class=\"n\">AnyValue</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">filter</span><span class=\"o\">=</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">rating__gt</span><span class=\"o\">=</span><span class=\"mf\">4.5</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">pub_year</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;pub_date__year&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">avg_rating</span><span class=\"o\">=</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"s2\">&quot;rating&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"n\">sample_headline</span><span class=\"o\">=</span><span class=\"n\">sample_headline</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Supported on SQLite, MySQL, Oracle, and PostgreSQL 16+.</p>\n<aside class=\"admonition-mysql-with-only-full-group-by-enabled admonition\">\n<p class=\"admonition-title\">MySQL with <code class=\"docutils literal notranslate\"><span class=\"pre\">ONLY_FULL_GROUP_BY</span></code> enabled</p>\n<p>When the <code class=\"docutils literal notranslate\"><span class=\"pre\">ONLY_FULL_GROUP_BY</span></code> SQL mode is enabled on MySQL it may be\nnecessary to use <code class=\"docutils literal notranslate\"><span class=\"pre\">AnyValue</span></code> if an aggregation includes a mix of\naggregate and non-aggregate functions. Using <code class=\"docutils literal notranslate\"><span class=\"pre\">AnyValue</span></code> allows the\nnon-aggregate function to be referenced in the select list when\ndatabase cannot determine that it is functionally dependent on the\ncolumns in the <a class=\"reference external\" href=\"https://dev.mysql.com/doc/refman/8.4/en/group-by-handling.html\">group by</a> clause. See the <a class=\"reference internal\" href=\"/ja/6.0/topics/db/aggregation/#aggregation-mysql-only-full-group-by\"><span class=\"std std-ref\">aggregation\ndocumentation</span></a> for more details.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"avg\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">Avg</span></code><a class=\"heading-anchor\" href=\"#avg\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Avg\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Avg</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expression</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">output_field</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">distinct</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">filter</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">default</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Avg\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>指定した式の平均値を返します。これは、別の <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> を指定しない限り、必ず数値となります。</p>\n<ul class=\"simple\">\n<li><p>デフォルトのエイリアス: <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;field&gt;__avg</span></code></p></li>\n<li><p>戻り値の型： 入力が <code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code> の場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code> を、それ以外の場合は入力フィールドと同じものを、 <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> を指定した場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> を返します。クエリセットまたはグループ化が空の場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> を返します。</p></li>\n</ul>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Avg.distinct\">\n<span class=\"sig-name descname\"><span class=\"pre\">distinct</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Avg.distinct\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>オプションです。 <code class=\"docutils literal notranslate\"><span class=\"pre\">distinct=True</span></code> の場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">Avg</span></code> は一意な値の平均値を返します。これは SQL の <code class=\"docutils literal notranslate\"><span class=\"pre\">AVG(DISTINCT</span> <span class=\"pre\">&lt;field&gt;)</span></code> と等価です。デフォルト値は <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> です。</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"id9\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">Count</span></code><a class=\"heading-anchor\" href=\"#id9\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Count\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Count</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expression</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">distinct</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">filter</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Count\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>指定した式で関連付けられたオブジェクトの数を返します。 <code class=\"docutils literal notranslate\"><span class=\"pre\">Count('*')</span></code> は SQL の <code class=\"docutils literal notranslate\"><span class=\"pre\">COUNT(*)</span></code> 式と等価です。</p>\n<ul class=\"simple\">\n<li><p>デフォルトのエイリアス: <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;field&gt;__count</span></code></p></li>\n<li><p>戻り値の型: <code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code></p></li>\n</ul>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Count.distinct\">\n<span class=\"sig-name descname\"><span class=\"pre\">distinct</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Count.distinct\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>オプションです。 <code class=\"docutils literal notranslate\"><span class=\"pre\">distinct=True</span></code> の場合、一意なインスタンスのみをカウントします。これは SQL の <code class=\"docutils literal notranslate\"><span class=\"pre\">COUNT(DISTINCT</span> <span class=\"pre\">&lt;field&gt;)</span></code> と等価です。デフォルト値は <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> です。</p>\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> 引数はサポートされていません。</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"max\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">Max</span></code><a class=\"heading-anchor\" href=\"#max\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Max\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Max</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expression</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">output_field</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">filter</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">default</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Max\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>指定された式の最大値を返します。</p>\n<ul class=\"simple\">\n<li><p>デフォルトのエイリアス: <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;field&gt;__max</span></code></p></li>\n<li><p>戻り値の型: 入力フィールドと同じ、または <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> が指定されている場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> を返します。クエリセットまたはグループ化が空の場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> が返されます。</p></li>\n</ul>\n</dd></dl>\n\n</section>\n<section id=\"min\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">Min</span></code><a class=\"heading-anchor\" href=\"#min\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Min\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Min</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expression</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">output_field</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">filter</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">default</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Min\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>指定した式の最小値を返します。</p>\n<ul class=\"simple\">\n<li><p>デフォルトのエイリアス: <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;field&gt;__min</span></code></p></li>\n<li><p>戻り値の型: 入力フィールドと同じ、または <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> が指定されている場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> を返します。クエリセットまたはグループ化が空の場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> が返されます。</p></li>\n</ul>\n</dd></dl>\n\n</section>\n<section id=\"stddev\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">StdDev</span></code><a class=\"heading-anchor\" href=\"#stddev\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.StdDev\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">StdDev</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expression</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">output_field</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">sample</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">filter</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">default</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.StdDev\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>指定した式のデータの標準偏差を返します。</p>\n<ul class=\"simple\">\n<li><p>デフォルトのエイリアス: <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;field&gt;__stddev</span></code></p></li>\n<li><p>戻り値の型： 入力が <code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code> の場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code> を、それ以外の場合は入力フィールドと同じものを、 <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> を指定した場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> を返します。クエリセットまたはグループ化が空の場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> を返します。</p></li>\n</ul>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.StdDev.sample\">\n<span class=\"sig-name descname\"><span class=\"pre\">sample</span></span><a class=\"heading-anchor\" href=\"#django.db.models.StdDev.sample\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>オプションです。デフォルトでは <code class=\"docutils literal notranslate\"><span class=\"pre\">StdDev</span></code> は母集団の標準偏差を返します。ただし、 <code class=\"docutils literal notranslate\"><span class=\"pre\">sample=True</span></code> の場合は、標本の標準偏差が返されます。</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"sum\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">Sum</span></code><a class=\"heading-anchor\" href=\"#sum\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Sum\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Sum</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expression</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">output_field</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">distinct</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">filter</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">default</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Sum\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>与えられた式のすべての値の合計を計算します。</p>\n<ul class=\"simple\">\n<li><p>デフォルトのエイリアス: <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;field&gt;__sum</span></code></p></li>\n<li><p>戻り値の型: 入力フィールドと同じ、または <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> が指定されている場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> を返します。クエリセットまたはグループ化が空の場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> が返されます。</p></li>\n</ul>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Sum.distinct\">\n<span class=\"sig-name descname\"><span class=\"pre\">distinct</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Sum.distinct\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>オプションです。 <code class=\"docutils literal notranslate\"><span class=\"pre\">distinct=True</span></code> の場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">Sum</span></code> は一意な値の合計を返します。これは SQL の <code class=\"docutils literal notranslate\"><span class=\"pre\">SUM(DISTINCT</span> <span class=\"pre\">)</span></code> と等価です。デフォルト値は <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> です。</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"variance\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">Variance</span></code><a class=\"heading-anchor\" href=\"#variance\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Variance\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Variance</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expression</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">output_field</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">sample</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">filter</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">default</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Variance\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>指定された式のデータの分散を返します。</p>\n<ul class=\"simple\">\n<li><p>デフォルトのエイリアス: <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;field&gt;__variance</span></code></p></li>\n<li><p>戻り値の型： 入力が <code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code> の場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code> を、それ以外の場合は入力フィールドと同じものを、 <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> を指定した場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> を返します。クエリセットまたはグループ化が空の場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> を返します。</p></li>\n</ul>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Variance.sample\">\n<span class=\"sig-name descname\"><span class=\"pre\">sample</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Variance.sample\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>オプションです。デフォルトでは <code class=\"docutils literal notranslate\"><span class=\"pre\">Variance</span></code> は母分散を返します。ただし、 <code class=\"docutils literal notranslate\"><span class=\"pre\">sample=True</span></code> の場合は、標本の分散を返します。</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"stringagg\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">StringAgg</span></code><a class=\"heading-anchor\" href=\"#stringagg\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<aside class=\"version-note version-added\" data-version=\"6.0\">\n<p class=\"version-note-title\">New in Django 6.0</p></aside>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.StringAgg\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">StringAgg</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expression</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">delimiter</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">output_field</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">distinct</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">filter</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">order_by</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">default</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.StringAgg\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>入力値を文字列に連結し、<code class=\"docutils literal notranslate\"><span class=\"pre\">delimiter</span></code> 文字列で区切って返します。値がない場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> を返します。</p>\n<ul class=\"simple\">\n<li><p>Default alias: <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;field&gt;__stringagg</span></code></p></li>\n<li><p>Return type: <code class=\"docutils literal notranslate\"><span class=\"pre\">string</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> if supplied. If the\nqueryset or grouping is empty, <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> is returned.</p></li>\n</ul>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.StringAgg.delimiter\">\n<span class=\"sig-name descname\"><span class=\"pre\">delimiter</span></span><a class=\"heading-anchor\" href=\"#django.db.models.StringAgg.delimiter\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A <code class=\"docutils literal notranslate\"><span class=\"pre\">Value</span></code> or expression representing the string that should separate\neach of the values. For example, <code class=\"docutils literal notranslate\"><span class=\"pre\">Value(&quot;,&quot;)</span></code>.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n</section>\n</section>\n<section id=\"query-related-tools\">\n<h2>クエリ関連ツール<a class=\"heading-anchor\" href=\"#query-related-tools\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>このセクションでは、他のセクションで説明されていないクエリ関連ツールの参考資料を提供します。</p>\n<section id=\"q-objects\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">Q()</span></code> オブジェクト<a class=\"heading-anchor\" href=\"#q-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Q\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Q</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Q\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Q()</span></code> オブジェクトは、データベース関連の操作で使用できるSQL条件を表します。これは、<a class=\"reference internal\" href=\"/ja/6.0/ref/models/expressions/#django.db.models.F\" title=\"django.db.models.F\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">F()</span></code></a> オブジェクトがモデルフィールドや注釈の値を表すのと似ています。これにより、条件を定義して再利用することが可能になります。これらは <code class=\"docutils literal notranslate\"><span class=\"pre\">~</span></code> （<code class=\"docutils literal notranslate\"><span class=\"pre\">NOT</span></code>）演算子を使って否定することができ、<code class=\"docutils literal notranslate\"><span class=\"pre\">|</span></code> （<code class=\"docutils literal notranslate\"><span class=\"pre\">OR</span></code>）、<code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;</span></code> （<code class=\"docutils literal notranslate\"><span class=\"pre\">AND</span></code>）、<code class=\"docutils literal notranslate\"><span class=\"pre\">^</span></code> （<code class=\"docutils literal notranslate\"><span class=\"pre\">XOR</span></code>）などの演算子も組み合わせて使えます。詳細は <a class=\"reference internal\" href=\"/ja/6.0/topics/db/queries/#complex-lookups-with-q\"><span class=\"std std-ref\">Q オブジェクトを使った複雑なルックアップ</span></a> を参照してください。</p>\n</section>\n<section id=\"prefetch-objects\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">Prefetch()</span></code> オブジェクト<a class=\"heading-anchor\" href=\"#prefetch-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Prefetch\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Prefetch</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">lookup</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">queryset</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">to_attr</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Prefetch\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">Prefetch()</span></code> object can be used to control the operation of\n<a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.prefetch_related\" title=\"django.db.models.query.QuerySet.prefetch_related\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">prefetch_related()</span></code></a>.</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">lookup</span></code> argument describes the relations to follow and works the same\nas the string based lookups passed to\n<a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.prefetch_related\" title=\"django.db.models.query.QuerySet.prefetch_related\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">prefetch_related()</span></code></a>. For example:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Prefetch</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Question</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s2\">&quot;choice_set&quot;</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">choice_set</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Choice: Not much&gt;, &lt;Choice: The sky&gt;, &lt;Choice: Just hacking again&gt;]&gt;</span>\n<span class=\"go\"># This will only execute two queries regardless of the number of Question</span>\n<span class=\"go\"># and Choice objects.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Question</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s2\">&quot;choice_set&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">&lt;QuerySet [&lt;Question: What&#39;s up?&gt;]&gt;</span>\n</code></pre></div>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">queryset</span></code> argument supplies a base <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> for the given lookup.\nThis is useful to further filter down the prefetch operation, or to call\n<a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.select_related\" title=\"django.db.models.query.QuerySet.select_related\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">select_related()</span></code></a> from the prefetched\nrelation, hence reducing the number of queries even further:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">voted_choices</span> <span class=\"o\">=</span> <span class=\"n\">Choice</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">votes__gt</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">voted_choices</span>\n<span class=\"go\">&lt;QuerySet [&lt;Choice: The sky&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">prefetch</span> <span class=\"o\">=</span> <span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s2\">&quot;choice_set&quot;</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">voted_choices</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Question</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"n\">prefetch</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">choice_set</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Choice: The sky&gt;]&gt;</span>\n</code></pre></div>\n<p>引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">to_attr</span></code> は、プリフェッチ操作の結果をカスタム属性にセットします:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">prefetch</span> <span class=\"o\">=</span> <span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s2\">&quot;choice_set&quot;</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">voted_choices</span><span class=\"p\">,</span> <span class=\"n\">to_attr</span><span class=\"o\">=</span><span class=\"s2\">&quot;voted_choices&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Question</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"n\">prefetch</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">voted_choices</span>\n<span class=\"go\">&lt;QuerySet [&lt;Choice: The sky&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Question</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"n\">prefetch</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">choice_set</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Choice: Not much&gt;, &lt;Choice: The sky&gt;, &lt;Choice: Just hacking again&gt;]&gt;</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">to_attr</span></code> を使用すると、プリフェッチされた結果はリストに格納されます。これは、キャッシュされた結果を <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> インスタンスに格納する従来の <code class=\"docutils literal notranslate\"><span class=\"pre\">prefetch_related</span></code> 呼び出しよりも大幅に速度を向上させることができます。</p>\n</aside>\n</section>\n<section id=\"prefetch-related-objects\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">prefetch_related_objects()</span></code><a class=\"heading-anchor\" href=\"#prefetch-related-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.prefetch_related_objects\">\n<span class=\"sig-name descname\"><span class=\"pre\">prefetch_related_objects</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_instances</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">related_lookups</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.prefetch_related_objects\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.aprefetch_related_objects\">\n<span class=\"sig-name descname\"><span class=\"pre\">aprefetch_related_objects</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_instances</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">related_lookups</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.aprefetch_related_objects\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aprefetch_related_objects()</span></code></p>\n<p>与えられたルックアップをモデルインスタンスのイテラブルでプリフェッチします。これは <code class=\"docutils literal notranslate\"><span class=\"pre\">クエリセット</span></code> とは対照的に、モデルインスタンスのリストを受け取るコードで有用です。たとえば、キャッシュからモデルを取得するときや、手動でインスタンスを作成するときなどです。</p>\n<p>Pass an iterable of model instances (must all be of the same class and able to\nbe iterated multiple times) and the lookups or <a class=\"reference internal\" href=\"#django.db.models.Prefetch\" title=\"django.db.models.Prefetch\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Prefetch</span></code></a> objects you\nwant to prefetch for. For example:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">prefetch_related_objects</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">restaurants</span> <span class=\"o\">=</span> <span class=\"n\">fetch_top_restaurants_from_cache</span><span class=\"p\">()</span>  <span class=\"c1\"># A list of Restaurants</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">prefetch_related_objects</span><span class=\"p\">(</span><span class=\"n\">restaurants</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pizzas__toppings&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>複数のデータベースを <code class=\"docutils literal notranslate\"><span class=\"pre\">prefetch_related_objects</span></code> で使用する場合、プリフェッチクエリはモデルインスタンスに関連付けられたデータベースを使用します。これは、リレーションのルックアップでカスタムクエリセットを使用することで上書きできます。</p>\n</section>\n<section id=\"filteredrelation-objects\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">FilteredRelation()</span></code> オブジェクト<a class=\"heading-anchor\" href=\"#filteredrelation-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.FilteredRelation\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">FilteredRelation</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">relation_name</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">condition</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">Q()</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.FilteredRelation\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.FilteredRelation.relation_name\">\n<span class=\"sig-name descname\"><span class=\"pre\">relation_name</span></span><a class=\"heading-anchor\" href=\"#django.db.models.FilteredRelation.relation_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>リレーションをフィルタしたいフィールドの名前</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.FilteredRelation.condition\">\n<span class=\"sig-name descname\"><span class=\"pre\">condition</span></span><a class=\"heading-anchor\" href=\"#django.db.models.FilteredRelation.condition\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>フィルタリングを制御する <a class=\"reference internal\" href=\"#django.db.models.Q\" title=\"django.db.models.Q\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Q</span></code></a> オブジェクトです。</p>\n</dd></dl>\n\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">FilteredRelation</span></code> is used with <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.annotate\" title=\"django.db.models.query.QuerySet.annotate\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">annotate()</span></code></a> to create an\n<code class=\"docutils literal notranslate\"><span class=\"pre\">ON</span></code> clause when a <code class=\"docutils literal notranslate\"><span class=\"pre\">JOIN</span></code> is performed. It doesn't act on the default\nrelationship but on the annotation name (<code class=\"docutils literal notranslate\"><span class=\"pre\">pizzas_vegetarian</span></code> in example\nbelow).</p>\n<p>たとえば、名前に「モッツァレラチーズ」が入っているベジタリアンのピザがあるレストランを探す場合、次のようにします:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">FilteredRelation</span><span class=\"p\">,</span> <span class=\"n\">Q</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Restaurant</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">pizzas_vegetarian</span><span class=\"o\">=</span><span class=\"n\">FilteredRelation</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"s2\">&quot;pizzas&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"n\">condition</span><span class=\"o\">=</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">pizzas__vegetarian</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pizzas_vegetarian__name__icontains</span><span class=\"o\">=</span><span class=\"s2\">&quot;mozzarella&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>ピザが大量にある場合、上記のクエリセットの方が下記より良いパフォーマンスを発揮します:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Restaurant</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">pizzas__vegetarian</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">pizzas__name__icontains</span><span class=\"o\">=</span><span class=\"s2\">&quot;mozzarella&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n<p>なぜなら、1つめのクエリセットの <code class=\"docutils literal notranslate\"><span class=\"pre\">WHERE</span></code> 句のフィルタリングはベジタリアンのピザに対してのみ行われるからです。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">FilteredRelation</span></code> は下記をサポートしていません。</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.only\" title=\"django.db.models.query.QuerySet.only\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">QuerySet.only()</span></code></a> と <a class=\"reference internal\" href=\"#django.db.models.query.QuerySet.prefetch_related\" title=\"django.db.models.query.QuerySet.prefetch_related\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">prefetch_related()</span></code></a> メソッド。</p></li>\n<li><p>親モデルから継承された <a class=\"reference internal\" href=\"/ja/6.0/ref/contrib/contenttypes/#django.contrib.contenttypes.fields.GenericForeignKey\" title=\"django.contrib.contenttypes.fields.GenericForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">GenericForeignKey</span></code></a> 。</p></li>\n</ul>\n</section>\n</section>","rootId":"queryset-api-reference","toc":[{"title":"QuerySet が評価されるタイミング","anchor":"when-querysets-are-evaluated","children":[{"title":"QuerySet の Pickle 化","anchor":"pickling-querysets","children":[]}]},{"title":"QuerySet API","anchor":"queryset-api","children":[{"title":"新しい QuerySets を返すメソッド","anchor":"methods-that-return-new-querysets","children":[{"title":"filter()","anchor":"filter","children":[]},{"title":"exclude()","anchor":"exclude","children":[]},{"title":"annotate()","anchor":"annotate","children":[]},{"title":"alias()","anchor":"alias","children":[]},{"title":"order_by()","anchor":"order-by","children":[]},{"title":"reverse()","anchor":"reverse","children":[]},{"title":"distinct()","anchor":"distinct","children":[]},{"title":"values()","anchor":"values","children":[]},{"title":"values_list()","anchor":"values-list","children":[]},{"title":"dates()","anchor":"dates","children":[]},{"title":"datetimes()","anchor":"datetimes","children":[]},{"title":"none()","anchor":"none","children":[]},{"title":"all()","anchor":"all","children":[]},{"title":"union()","anchor":"union","children":[]},{"title":"intersection()","anchor":"intersection","children":[]},{"title":"difference()","anchor":"difference","children":[]},{"title":"select_related()","anchor":"select-related","children":[]},{"title":"prefetch_related()","anchor":"prefetch-related","children":[]},{"title":"extra()","anchor":"extra","children":[]},{"title":"defer()","anchor":"defer","children":[]},{"title":"only()","anchor":"only","children":[]},{"title":"using()","anchor":"using","children":[]},{"title":"select_for_update()","anchor":"select-for-update","children":[]},{"title":"raw()","anchor":"raw","children":[]}]},{"title":"新しい QuerySet を返す演算子","anchor":"operators-that-return-new-querysets","children":[{"title":"AND (&)","anchor":"and","children":[]},{"title":"OR (|)","anchor":"or","children":[]},{"title":"XOR (^)","anchor":"xor","children":[]}]},{"title":"QuerySet を返さないメソッド","anchor":"methods-that-do-not-return-querysets","children":[{"title":"get()","anchor":"get","children":[]},{"title":"create()","anchor":"create","children":[]},{"title":"get_or_create()","anchor":"get-or-create","children":[]},{"title":"update_or_create()","anchor":"update-or-create","children":[]},{"title":"bulk_create()","anchor":"bulk-create","children":[]},{"title":"bulk_update()","anchor":"bulk-update","children":[]},{"title":"count()","anchor":"count","children":[]},{"title":"in_bulk()","anchor":"in-bulk","children":[]},{"title":"iterator()","anchor":"iterator","children":[{"title":"サーバーサイドカーソルとともに使う","anchor":"with-server-side-cursors","children":[]},{"title":"サーバーサイドカーソルなしで使う","anchor":"without-server-side-cursors","children":[]}]},{"title":"latest()","anchor":"latest","children":[]},{"title":"earliest()","anchor":"earliest","children":[]},{"title":"first()","anchor":"first","children":[]},{"title":"last()","anchor":"last","children":[]},{"title":"aggregate()","anchor":"aggregate","children":[]},{"title":"exists()","anchor":"exists","children":[]},{"title":"contains()","anchor":"contains","children":[]},{"title":"update()","anchor":"update","children":[{"title":"ソートされたクエリセット","anchor":"ordered-queryset","children":[]}]},{"title":"delete()","anchor":"delete","children":[]},{"title":"as_manager()","anchor":"as-manager","children":[]},{"title":"explain()","anchor":"explain","children":[]}]},{"title":"Field ルックアップ","anchor":"field-lookups","children":[{"title":"exact","anchor":"exact","children":[]},{"title":"iexact","anchor":"iexact","children":[]},{"title":"contains","anchor":"std-fieldlookup-contains","children":[]},{"title":"icontains","anchor":"icontains","children":[]},{"title":"in","anchor":"in","children":[]},{"title":"gt","anchor":"gt","children":[]},{"title":"gte","anchor":"gte","children":[]},{"title":"lt","anchor":"lt","children":[]},{"title":"lte","anchor":"lte","children":[]},{"title":"startswith","anchor":"startswith","children":[]},{"title":"istartswith","anchor":"istartswith","children":[]},{"title":"endswith","anchor":"endswith","children":[]},{"title":"iendswith","anchor":"iendswith","children":[]},{"title":"range","anchor":"range","children":[]},{"title":"date","anchor":"date","children":[]},{"title":"year","anchor":"year","children":[]},{"title":"iso_year","anchor":"iso-year","children":[]},{"title":"month","anchor":"month","children":[]},{"title":"day","anchor":"day","children":[]},{"title":"week","anchor":"week","children":[]},{"title":"week_day","anchor":"week-day","children":[]},{"title":"iso_week_day","anchor":"iso-week-day","children":[]},{"title":"quarter","anchor":"quarter","children":[]},{"title":"time","anchor":"time","children":[]},{"title":"hour","anchor":"hour","children":[]},{"title":"minute","anchor":"minute","children":[]},{"title":"second","anchor":"second","children":[]},{"title":"isnull","anchor":"isnull","children":[]},{"title":"regex","anchor":"regex","children":[]},{"title":"iregex","anchor":"iregex","children":[]}]},{"title":"集計（Aggregation）関数","anchor":"aggregation-functions","children":[{"title":"expressions","anchor":"expressions","children":[]},{"title":"output_field","anchor":"output-field","children":[]},{"title":"filter","anchor":"aggregate-filter","children":[]},{"title":"default","anchor":"default","children":[]},{"title":"**extra","anchor":"id8","children":[]},{"title":"AnyValue","anchor":"anyvalue","children":[]},{"title":"Avg","anchor":"avg","children":[]},{"title":"Count","anchor":"id9","children":[]},{"title":"Max","anchor":"max","children":[]},{"title":"Min","anchor":"min","children":[]},{"title":"StdDev","anchor":"stddev","children":[]},{"title":"Sum","anchor":"sum","children":[]},{"title":"Variance","anchor":"variance","children":[]},{"title":"StringAgg","anchor":"stringagg","children":[]}]}]},{"title":"クエリ関連ツール","anchor":"query-related-tools","children":[{"title":"Q() オブジェクト","anchor":"q-objects","children":[]},{"title":"Prefetch() オブジェクト","anchor":"prefetch-objects","children":[]},{"title":"prefetch_related_objects()","anchor":"prefetch-related-objects","children":[]},{"title":"FilteredRelation() オブジェクト","anchor":"filteredrelation-objects","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API リファレンス","url":"/ja/6.0/ref/"},{"docname":"ref/models/index","title":"モデル","url":"/ja/6.0/ref/models/"}],"prev":{"docname":"ref/models/instances","title":"モデルインスタンスリファレンス","url":"/ja/6.0/ref/models/instances/"},"next":{"docname":"ref/models/lookups","title":"ルックアップ API リファレンス","url":"/ja/6.0/ref/models/lookups/"},"formats":{"html":"/ja/6.0/ref/models/querysets/","markdown":"/ja/6.0/ref/models/querysets.md","json":"/ja/6.0/ref/models/querysets.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/ref/models/querysets.txt","official":"https://docs.djangoproject.com/ja/6.0/ref/models/querysets/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}