{"title":"ルックアップ API リファレンス","version":"5.0","locale":"ja","docname":"ref/models/lookups","url":"/ja/5.0/ref/models/lookups/","canonical":"https://djangodocs.dev/ja/5.0/ref/models/lookups/","summary":"このドキュメントには、データベースクエリの WHERE 句を構築するための Django API であるルックアップの API リファレンスがあります。ルックアップの 使い方 については クエリを作成する を、新しいルックアップの 作り方 については カスタムのルックアップを書く を参照してください。…","html":"<span id=\"lookup-api-reference\"></span><h1>ルックアップ API リファレンス<a class=\"heading-anchor\" href=\"#module-django.db.models.lookups\"><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\">WHERE</span></code> 句を構築するための Django API であるルックアップの API リファレンスがあります。ルックアップの <em>使い方</em> については <a class=\"reference internal\" href=\"/ja/5.0/topics/db/queries/\"><span class=\"doc\">クエリを作成する</span></a> を、新しいルックアップの <em>作り方</em> については <a class=\"reference internal\" href=\"/ja/5.0/howto/custom-lookups/\"><span class=\"doc\">カスタムのルックアップを書く</span></a> を参照してください。</p>\n<p>ルックアップAPIには2つのコンポーネントがあります。ルックアップを登録する <a class=\"reference internal\" href=\"#django.db.models.lookups.RegisterLookupMixin\" title=\"django.db.models.lookups.RegisterLookupMixin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RegisterLookupMixin</span></code></a> クラスと、ルックアップとして登録するためにクラスが実装しなければならないメソッドのセットである <a class=\"reference internal\" href=\"#query-expression\"><span class=\"std std-ref\">クエリ式 API</span></a> です。</p>\n<p>Django には、クエリ式 API に従う 2 つの基本クラスがあり、すべての Django 組み込みルックアップはここから派生しています:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"#django.db.models.Lookup\" title=\"django.db.models.Lookup\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Lookup</span></code></a>: フィールドをルックアップします (例えば <code class=\"docutils literal notranslate\"><span class=\"pre\">field_name__exact</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">exact</span></code>)</p></li>\n<li><p><a class=\"reference internal\" href=\"#django.db.models.Transform\" title=\"django.db.models.Transform\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Transform</span></code></a>: フィールドをトランスフォーム（変換）します。</p></li>\n</ul>\n<p>ルックアップ式は3つの部分で構成されています:</p>\n<ul class=\"simple\">\n<li><p>フィールド部分（例: <code class=\"docutils literal notranslate\"><span class=\"pre\">Book.objects.filter(author__best_friends__first_name...</span></code> ）;</p></li>\n<li><p>トランスフォーム（変換）部分（省略可） (<code class=\"docutils literal notranslate\"><span class=\"pre\">lower__first3chars__reversed</span></code> など);</p></li>\n<li><p>ルックアップ部分 (<code class=\"docutils literal notranslate\"><span class=\"pre\">__icontains</span></code> など)。省略した場合のデフォルトは <code class=\"docutils literal notranslate\"><span class=\"pre\">__exact</span></code> です。</p></li>\n</ul>\n<section id=\"registration-api\">\n<span id=\"lookup-registration-api\"></span><h2>登録API<a class=\"heading-anchor\" href=\"#registration-api\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django は <a class=\"reference internal\" href=\"#django.db.models.lookups.RegisterLookupMixin\" title=\"django.db.models.lookups.RegisterLookupMixin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RegisterLookupMixin</span></code></a> を使って、自分自身やそのインスタンスにルックアップを登録するインターフェイスをクラスに与えます。代表的な例は <a class=\"reference internal\" href=\"/ja/5.0/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a> で、これはすべてのモデルフィールドの基底クラスです。 <a class=\"reference internal\" href=\"#django.db.models.Transform\" title=\"django.db.models.Transform\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Transform</span></code></a> もその一つで、これはすべての Django トランスフォームの基底クラスです。</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.lookups.RegisterLookupMixin\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">lookups.</span></span><span class=\"sig-name descname\"><span class=\"pre\">RegisterLookupMixin</span></span><a class=\"heading-anchor\" href=\"#django.db.models.lookups.RegisterLookupMixin\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>クラスのルックアップ API を実装するミックスインです。</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.lookups.RegisterLookupMixin.register_lookup\">\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\">register_lookup</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\">lookup_name</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.lookups.RegisterLookupMixin.register_lookup\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><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\">DateField</span><span class=\"o\">.</span><span class=\"n\">register_lookup</span><span class=\"p\">(</span><span class=\"n\">YearExact</span><span class=\"p\">)</span>\n<span class=\"n\">User</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">get_field</span><span class=\"p\">(</span><span class=\"s2\">&quot;date_joined&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">register_lookup</span><span class=\"p\">(</span><span class=\"n\">MonthExact</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>このコードは <code class=\"docutils literal notranslate\"><span class=\"pre\">DateField</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">YearExact</span></code> ルックアップと <code class=\"docutils literal notranslate\"><span class=\"pre\">User.date_joined</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">MonthExact</span></code> ルックアップを登録します（ <a class=\"reference internal\" href=\"/ja/5.0/ref/models/meta/#model-meta-field-api\"><span class=\"std std-ref\">フィールドアクセス API</span></a> を使用して単一のフィールドインスタンスを取得できます）。このルックアップは既に存在する同じ名前のルックアップを上書きします。フィールドインスタンスに登録されたルックアップはクラスに登録されたルックアップよりも優先されます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">lookup.lookup_name</span></code> が指定された場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">lookup_name</span></code> が使用され、指定されなかった場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">lookup.lookup_name</span></code> が使用されます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.lookups.RegisterLookupMixin.get_lookup\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_lookup</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">lookup_name</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.lookups.RegisterLookupMixin.get_lookup\"><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\">lookup_name</span></code> という名前の <a class=\"reference internal\" href=\"#django.db.models.Lookup\" title=\"django.db.models.Lookup\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Lookup</span></code></a> を、呼び出しに応じて返します。デフォルトの実装では、全ての親クラスを再帰的にルックアップし、 <code class=\"docutils literal notranslate\"><span class=\"pre\">lookup_name</span></code> という名前のルックアップが登録されているかどうかをチェックし、最初にマッチしたものを返します。インスタンスのルックアップは同じ <code class=\"docutils literal notranslate\"><span class=\"pre\">Lookup_name</span></code> を持つクラスのルックアップを上書きします。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.lookups.RegisterLookupMixin.get_lookups\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_lookups</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.lookups.RegisterLookupMixin.get_lookups\"><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.Lookup\" title=\"django.db.models.Lookup\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Lookup</span></code></a> クラスにマップされたクラスまたはクラスインスタンスに登録されているルックアップ名の辞書を返します。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.lookups.RegisterLookupMixin.get_transform\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_transform</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">transform_name</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.lookups.RegisterLookupMixin.get_transform\"><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\">transform_name</span></code> という <a class=\"reference internal\" href=\"#django.db.models.Transform\" title=\"django.db.models.Transform\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Transform</span></code></a> を返します。デフォルトの実装では、すべての親クラスを再帰的に検索し、 <code class=\"docutils literal notranslate\"><span class=\"pre\">transform_name</span></code> という名前のトランスフォームが登録されているかどうかを調べ、最初にマッチしたものを返します。</p>\n</dd></dl>\n\n</dd></dl>\n\n<p>クラスがルックアップであるためには、 <a class=\"reference internal\" href=\"#query-expression\"><span class=\"std std-ref\">クエリ式 API</span></a> に従わなければなりません。 <a class=\"reference internal\" href=\"#django.db.models.Lookup\" title=\"django.db.models.Lookup\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Lookup</span></code></a> と <a class=\"reference internal\" href=\"#django.db.models.Transform\" title=\"django.db.models.Transform\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Transform</span></code></a> は当然この API に従います。</p>\n<aside class=\"version-note version-changed\" data-version=\"4.2\">\n<p class=\"version-note-title\">Changed in Django 4.2</p><p><a class=\"reference internal\" href=\"/ja/5.0/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a> インスタンスにルックアップを登録できるようになりました。</p>\n</aside>\n</section>\n<section id=\"the-query-expression-api\">\n<span id=\"query-expression\"></span><h2>クエリ式 API<a class=\"heading-anchor\" href=\"#the-query-expression-api\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>クエリ式 API はクラスがクエリ式で使用できるように定義するメソッドの共通セットで、クラス自身を SQL 式に変換します。フィールドの直接参照、集計（Aggregation）、 <code class=\"docutils literal notranslate\"><span class=\"pre\">Transform</span></code> はこのAPIに従う例です。あるクラスが以下のメソッドを実装している場合、そのクラスはクエリ式APIに従っていると言えます:</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.as_sql\">\n<span class=\"sig-name descname\"><span class=\"pre\">as_sql</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">compiler</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">connection</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.as_sql\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>式の SQL フラグメントを生成します。タプル <code class=\"docutils literal notranslate\"><span class=\"pre\">(sql,</span> <span class=\"pre\">params)</span></code> を返します。<code class=\"docutils literal notranslate\"><span class=\"pre\">sql</span></code> は SQL 文字列で、<code class=\"docutils literal notranslate\"><span class=\"pre\">params</span></code> はクエリパラメータのリストまたはタプルです。 <code class=\"docutils literal notranslate\"><span class=\"pre\">compiler</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">SQLCompiler</span></code> オブジェクトで、他の式をコンパイルするための <code class=\"docutils literal notranslate\"><span class=\"pre\">compile()</span></code> メソッドを持っています。 <code class=\"docutils literal notranslate\"><span class=\"pre\">connection</span></code> はクエリの実行に使用する接続です。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">expression.as_sql()</span></code> の呼び出しは通常正しくありません。 代わりに <code class=\"docutils literal notranslate\"><span class=\"pre\">compiler.compile(expression)</span></code> を使用する必要があります。 <code class=\"docutils literal notranslate\"><span class=\"pre\">compiler.compile()</span></code> メソッドは式のベンダ固有のメソッドの呼び出しを行います。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">as_vendorname()</span></code> メソッドやサブクラスがSQL文字列の生成を上書きするためにデータを提供する必要がありそうな場合は、このメソッドにカスタムキーワード引数を定義できます。たとえば、 <a class=\"reference internal\" href=\"/ja/5.0/ref/models/expressions/#django.db.models.Func.as_sql\" title=\"django.db.models.Func.as_sql\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Func.as_sql()</span></code></a> を参照してください。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.as_vendorname\">\n<span class=\"sig-name descname\"><span class=\"pre\">as_vendorname</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">compiler</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">connection</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.as_vendorname\"><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\">as_sql()</span></code> メソッドと同じように動作します。式が <code class=\"docutils literal notranslate\"><span class=\"pre\">compiler.compile()</span></code> によってコンパイルされると、Django はまず <code class=\"docutils literal notranslate\"><span class=\"pre\">as_vendorname()</span></code> を呼び出そうとします。ここで <code class=\"docutils literal notranslate\"><span class=\"pre\">vendorname</span></code> はクエリを実行するバックエンドのベンダ名です。 <code class=\"docutils literal notranslate\"><span class=\"pre\">vendorname</span></code> は Django の組み込みバックエンドでは <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\">sqlite</span></code> 、 <code class=\"docutils literal notranslate\"><span class=\"pre\">mysql</span></code> のいずれかです。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.get_lookup\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_lookup</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">lookup_name</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.get_lookup\"><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\">lookup_name</span></code> を返さなければなりません。インスタンスンスでは <code class=\"docutils literal notranslate\"><span class=\"pre\">self.output_field.get_lookup(lookup_name)</span></code> を返します。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.get_transform\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_transform</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">transform_name</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.get_transform\"><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\">transform_name</span></code> を返さなければなりません。インスタンスンスでは <code class=\"docutils literal notranslate\"><span class=\"pre\">self.output_field.get_transform(transform_name)</span></code> を返します。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.output_field\">\n<span class=\"sig-name descname\"><span class=\"pre\">output_field</span></span><a class=\"heading-anchor\" href=\"#django.db.models.output_field\"><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\">get_lookup()</span></code> メソッドが返すクラスの型を定義します。これは <a class=\"reference internal\" href=\"/ja/5.0/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a> インスタンスでなければなりません。</p>\n</dd></dl>\n\n</section>\n<section id=\"transform-reference\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">Transform</span></code> リファレンス<a class=\"heading-anchor\" href=\"#transform-reference\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Transform\">\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\">Transform</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Transform\"><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\">Transform</span></code> はフィールドの変換を実装するための汎用クラスです。主な例は <code class=\"docutils literal notranslate\"><span class=\"pre\">DateField</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">IntegerField</span></code> に変換する <code class=\"docutils literal notranslate\"><span class=\"pre\">__year</span></code> です。</p>\n<p>ルックアップ式で <code class=\"docutils literal notranslate\"><span class=\"pre\">Transform</span></code> を使用する場合の表記は <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;expression&gt;__&lt;transformation&gt;</span></code> (例 <code class=\"docutils literal notranslate\"><span class=\"pre\">date__year</span></code>) です。</p>\n<p>このクラスは <a class=\"reference internal\" href=\"#query-expression\"><span class=\"std std-ref\">クエリ式 API</span></a> に従っており、 <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;expression&gt;__&lt;transform1&gt;__&lt;transform2&gt;</span></code> を使用できます。これは <a class=\"reference internal\" href=\"/ja/5.0/ref/models/expressions/#func-expressions\"><span class=\"std std-ref\">Func() 式</span></a> に特化したもので、引数を一つだけ受け取ることができます。 また、フィルタの右辺やアノテーションとして直接使用することもできます。</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Transform.bilateral\">\n<span class=\"sig-name descname\"><span class=\"pre\">bilateral</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Transform.bilateral\"><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\">lhs</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">rhs</span></code> の両方に適用するかどうかを示すブール値です。両者の変換は <code class=\"docutils literal notranslate\"><span class=\"pre\">rhs</span></code> に対して、ルックアップ式に現れる順番で適用されます。デフォルトでは <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> に設定されています。たとえば、 <a class=\"reference internal\" href=\"/ja/5.0/howto/custom-lookups/\"><span class=\"doc\">カスタムのルックアップを書く</span></a> を参照してください。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Transform.lhs\">\n<span class=\"sig-name descname\"><span class=\"pre\">lhs</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Transform.lhs\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>左辺 - 変換されるもの。これは <a class=\"reference internal\" href=\"#query-expression\"><span class=\"std std-ref\">クエリ式API</span></a> に従わなければなりません。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Transform.lookup_name\">\n<span class=\"sig-name descname\"><span class=\"pre\">lookup_name</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Transform.lookup_name\"><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\">&quot;__&quot;</span></code> を含むことはできません。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Transform.output_field\">\n<span class=\"sig-name descname\"><span class=\"pre\">output_field</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Transform.output_field\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>このトランスフォームが出力するクラスを定義します。これは <a class=\"reference internal\" href=\"/ja/5.0/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a> インスタンスでなければなりません。デフォルトでは <code class=\"docutils literal notranslate\"><span class=\"pre\">lhs.output_field</span></code> と同じです。</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"lookup-reference\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">Lookup</span></code> リファレンス<a class=\"heading-anchor\" href=\"#lookup-reference\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Lookup\">\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\">Lookup</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Lookup\"><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\">Lookup</span></code> はルックアップを実装するための汎用クラスです。ルックアップは左辺 <a class=\"reference internal\" href=\"#django.db.models.Lookup.lhs\" title=\"django.db.models.Lookup.lhs\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">lhs</span></code></a>; 右辺 <a class=\"reference internal\" href=\"#django.db.models.Lookup.rhs\" title=\"django.db.models.Lookup.rhs\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">rhs</span></code></a>; <code class=\"docutils literal notranslate\"><span class=\"pre\">lookup_name</span></code> を持つクエリ式で、 <code class=\"docutils literal notranslate\"><span class=\"pre\">lhs</span> <span class=\"pre\">in</span> <span class=\"pre\">rhs</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">lhs</span> <span class=\"pre\">&gt;</span> <span class=\"pre\">rhs</span></code> のように <code class=\"docutils literal notranslate\"><span class=\"pre\">lhs</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">rhs</span></code> をブール値で比較します。</p>\n<p>式の中でルックアップを使用するための主な記法は <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;lhs&gt;__&lt;lookup_name&gt;=&lt;rhs&gt;</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\">Book</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\">LessThan</span><span class=\"p\">(</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;word_count&quot;</span><span class=\"p\">),</span> <span class=\"mi\">7500</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\">Book</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\">is_short_story</span><span class=\"o\">=</span><span class=\"n\">LessThan</span><span class=\"p\">(</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;word_count&quot;</span><span class=\"p\">),</span> <span class=\"mi\">7500</span><span class=\"p\">))</span>\n</code></pre></div>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Lookup.lhs\">\n<span class=\"sig-name descname\"><span class=\"pre\">lhs</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Lookup.lhs\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>左辺 - ルックアップされる対象。オブジェクトは通常 <a class=\"reference internal\" href=\"#query-expression\"><span class=\"std std-ref\">クエリ式API</span></a> に従います。プレーンな値の場合もあります。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Lookup.rhs\">\n<span class=\"sig-name descname\"><span class=\"pre\">rhs</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Lookup.rhs\"><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\">lhs</span></code> と比較されるもの。これは単なる値であったり、SQL にコンパイルされるものであったり、一般的には <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> オブジェクトや <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> であったりします。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Lookup.lookup_name\">\n<span class=\"sig-name descname\"><span class=\"pre\">lookup_name</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Lookup.lookup_name\"><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\">&quot;__&quot;</span></code> を含むことはできません。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Lookup.prepare_rhs\">\n<span class=\"sig-name descname\"><span class=\"pre\">prepare_rhs</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Lookup.prepare_rhs\"><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> です。 <a class=\"reference internal\" href=\"#django.db.models.Lookup.rhs\" title=\"django.db.models.Lookup.rhs\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">rhs</span></code></a> がプレーンな値の場合、 <a class=\"reference internal\" href=\"#django.db.models.Lookup.prepare_rhs\" title=\"django.db.models.Lookup.prepare_rhs\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">prepare_rhs</span></code></a> はクエリのパラメータとして使用するために、その値を準備するかどうかを決定します。そのために、 <code class=\"docutils literal notranslate\"><span class=\"pre\">lhs.output_field.get_prep_value()</span></code> が定義されていれば呼び出され、そうでなければ <code class=\"docutils literal notranslate\"><span class=\"pre\">rhs</span></code> は <a class=\"reference internal\" href=\"/ja/5.0/ref/models/expressions/#django.db.models.Value\" title=\"django.db.models.Value\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Value()</span></code></a> でラップされます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Lookup.process_lhs\">\n<span class=\"sig-name descname\"><span class=\"pre\">process_lhs</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">compiler</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">connection</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">lhs</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.Lookup.process_lhs\"><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\">compiler.compile(lhs)</span></code> が返すタプル <code class=\"docutils literal notranslate\"><span class=\"pre\">(lhs_string,</span> <span class=\"pre\">lhs_params)</span></code> を返します。このメソッドをオーバーライドすることで、 <code class=\"docutils literal notranslate\"><span class=\"pre\">lhs</span></code> の処理方法を調整できます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">compiler</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">SQLCompiler</span></code> オブジェクトで、 <code class=\"docutils literal notranslate\"><span class=\"pre\">lhs</span></code> をコンパイルする際に <code class=\"docutils literal notranslate\"><span class=\"pre\">compiler.compile(lhs)</span></code> のように使用します。 <code class=\"docutils literal notranslate\"><span class=\"pre\">connection</span></code> はベンダ固有の SQL をコンパイルする際に使用します。 <code class=\"docutils literal notranslate\"><span class=\"pre\">lhs</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> でない場合は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">self.lhs</span></code> の代わりに <code class=\"docutils literal notranslate\"><span class=\"pre\">lhs</span></code> を使用します。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Lookup.process_rhs\">\n<span class=\"sig-name descname\"><span class=\"pre\">process_rhs</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">compiler</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">connection</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Lookup.process_rhs\"><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.Lookup.process_lhs\" title=\"django.db.models.Lookup.process_lhs\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">process_lhs()</span></code></a> と同じように扱います。</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>","rootId":"module-django.db.models.lookups","toc":[{"title":"登録API","anchor":"registration-api","children":[]},{"title":"クエリ式 API","anchor":"the-query-expression-api","children":[]},{"title":"Transform リファレンス","anchor":"transform-reference","children":[]},{"title":"Lookup リファレンス","anchor":"lookup-reference","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API リファレンス","url":"/ja/5.0/ref/"},{"docname":"ref/models/index","title":"モデル","url":"/ja/5.0/ref/models/"}],"prev":{"docname":"ref/models/querysets","title":"QuerySet API リファレンス","url":"/ja/5.0/ref/models/querysets/"},"next":{"docname":"ref/models/expressions","title":"クエリ式 (Query Expression)","url":"/ja/5.0/ref/models/expressions/"},"formats":{"html":"/ja/5.0/ref/models/lookups/","markdown":"/ja/5.0/ref/models/lookups.md","json":"/ja/5.0/ref/models/lookups.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/ref/models/lookups.txt","official":"https://docs.djangoproject.com/ja/5.0/ref/models/lookups/","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","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}