{"title":"API de référence des expressions de recherche","version":"5.1","locale":"fr","docname":"ref/models/lookups","url":"/fr/5.1/ref/models/lookups/","canonical":"https://djangodocs.dev/fr/5.1/ref/models/lookups/","summary":"Ce document contient les références d’API des expressions de recherches, l’API Django pour la construction des clauses WHERE des requêtes de bases de données. Pour…","html":"<span id=\"lookup-api-reference\"></span><h1>API de référence des expressions de recherche<a class=\"heading-anchor\" href=\"#module-django.db.models.lookups\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Ce document contient les références d’API des expressions de recherches, l’API Django pour la construction des clauses <code class=\"docutils literal notranslate\"><span class=\"pre\">WHERE</span></code> des requêtes de bases de données. Pour apprendre comment <em>utiliser</em> ces expressions, consultez <a class=\"reference internal\" href=\"/fr/5.1/topics/db/queries/\"><span class=\"doc\">Création de requêtes</span></a>. Pour apprendre comment <em>créer</em> de nouvelles expressions, consultez <a class=\"reference internal\" href=\"/fr/5.1/howto/custom-lookups/\"><span class=\"doc\">Écriture d’expressions de requêtes personnalisées</span></a>.</p>\n<p>L’API des expressions de recherche possède deux parties : une classe <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> qui inscrit les expressions et l’<a class=\"reference internal\" href=\"#query-expression\"><span class=\"std std-ref\">API des expressions de recherche</span></a>, un ensemble de méthodes qu’une classe doit implémenter afin d’être inscriptible comme expression de recherche.</p>\n<p>Django possède deux classes de base qui respectent l’API d’expression de recherche et à partir desquelles toutes les expressions de recherche fournies par Django sont dérivées :</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>: pour rechercher un champ (par ex. la partie <code class=\"docutils literal notranslate\"><span class=\"pre\">exact</span></code> de <code class=\"docutils literal notranslate\"><span class=\"pre\">nom_champ__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>: pour transformer un champ</p></li>\n</ul>\n<p>Une expression de recherche est formée de trois parties :</p>\n<ul class=\"simple\">\n<li><p>la partie des champs (par ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">Livre.objects.filter(auteur__meilleurs_amis__prenom...</span></code>) ;</p></li>\n<li><p>la partie de transformation (peut être omise) (par ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">__lower__troispremierscars__reversed</span></code>) ;</p></li>\n<li><p>la partie de recherche (par ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">__icontains</span></code>) qui, si elle est omise, correspond à <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 d’inscription<a class=\"heading-anchor\" href=\"#registration-api\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django utilise <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> pour donner à une classe l’interface pour inscrire des recherches avec elle-même ou avec ses instances. Les deux exemples majeurs sont <a class=\"reference internal\" href=\"/fr/5.1/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>, la classe de base de tous les champs de modèles, et <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>, la classe de base de toutes les transformations de 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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Une classe mixin qui implémente l’API de recherche pour une classe.</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Inscrit une nouvelle expression de requête dans la classe ou l’instance de classe. Par exemple</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>va inscrire la recherche <code class=\"docutils literal notranslate\"><span class=\"pre\">YearExact</span></code> pour <code class=\"docutils literal notranslate\"><span class=\"pre\">DateField</span></code> et la recherche <code class=\"docutils literal notranslate\"><span class=\"pre\">MonthExact</span></code> pour <code class=\"docutils literal notranslate\"><span class=\"pre\">User.date_joined</span></code> (vous pouvez utiliser l”:ref:API d’accès aux champs &lt;model-meta-field-api&gt;` pour récupérer une seule instance de champ). Si une recherche existe déjà avec le même nom, elle sera écrasée. Les expressions de requête inscrites pour des instances de champs ont la priorité sur celles inscrites sur les classes. Le nom utilisé pour cette expression sera <code class=\"docutils literal notranslate\"><span class=\"pre\">lookup_name</span></code>, si indiqué, sinon ce sera <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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie la recherche <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> nommée <code class=\"docutils literal notranslate\"><span class=\"pre\">lookup_name</span></code> inscrite dans la classe ou l’instance de classe selon l’origine de l’appel. L’implémentation par défaut cherche récursivement dans toutes les classes parentes et vérifie si l’une d’elles possède une recherche inscrite sous le nom <code class=\"docutils literal notranslate\"><span class=\"pre\">lookup_name</span></code>, et renvoie la première qu’elle rencontre. Des recherches inscrites sur les instances écrasent toute recherche sur la classe ayant le même nom <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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie un dictionnaire faisant correspondre chaque nom de requête inscrit dans la classe ou instance de classe avec sa classe <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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie une transformation <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> nommée <code class=\"docutils literal notranslate\"><span class=\"pre\">transform_name</span></code>, inscrite dans la classe ou une instance de classe. L’implémentation par défaut cherche récursivement dans toutes les classes parentes et vérifie si l’une d’elles possède une transformation inscrite sous le nom <code class=\"docutils literal notranslate\"><span class=\"pre\">transform_name</span></code>, et renvoie la première qu’elle rencontre.</p>\n</dd></dl>\n\n</dd></dl>\n\n<p>Pour qu’une classe soit considérée comme une recherche, elle doit suivre l’<a class=\"reference internal\" href=\"#query-expression\"><span class=\"std std-ref\">API d’expression de recherche</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> et <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> suivent naturellement cette API.</p>\n</section>\n<section id=\"the-query-expression-api\">\n<span id=\"query-expression\"></span><h2>L’API d’expression de recherche<a class=\"heading-anchor\" href=\"#the-query-expression-api\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>L’API d’expression de recherche est un ensemble commun de méthodes que les classes définissent afin de pouvoir être utilisées dans les expressions de recherche avec la capacité de se traduire en expressions SQL. Les références directes aux champs, les agrégations et les expressions <code class=\"docutils literal notranslate\"><span class=\"pre\">Transform</span></code> sont des exemples qui respectent cette API. On dit d’une classe qu’elle respecte l’API d’expression de recherche lorsqu’elle implémente les méthodes suivantes :</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Génère le fragment SQL de l’expression. Renvoie un tuple <code class=\"docutils literal notranslate\"><span class=\"pre\">(sql,</span> <span class=\"pre\">params)</span></code>, où <code class=\"docutils literal notranslate\"><span class=\"pre\">sql</span></code> est la chaîne SQL et <code class=\"docutils literal notranslate\"><span class=\"pre\">params</span></code> est la liste ou le tuple des paramètres de requête. <code class=\"docutils literal notranslate\"><span class=\"pre\">compiler</span></code> est un objet <code class=\"docutils literal notranslate\"><span class=\"pre\">SQLCompiler</span></code> comportant une méthode <code class=\"docutils literal notranslate\"><span class=\"pre\">compile()</span></code> pouvant être utilisée pour compiler d’autres expressions. <code class=\"docutils literal notranslate\"><span class=\"pre\">connection</span></code> est la connexion utilisée pour exécuter la requête.</p>\n<p>Il n’est normalement pas correct d’appeler <code class=\"docutils literal notranslate\"><span class=\"pre\">expression.as_sql()</span></code>, c’est plutôt <code class=\"docutils literal notranslate\"><span class=\"pre\">compiler.compile(expression)</span></code> qui doit être utilisé. La méthode <code class=\"docutils literal notranslate\"><span class=\"pre\">compiler.compile()</span></code> se charge d’appeler les méthodes spécifiques au fournisseur de base de données pour l’expression donnée.</p>\n<p>Des paramètres nommés personnalisés peuvent être définis pour cette méthode s’il est probable que des méthodes <code class=\"docutils literal notranslate\"><span class=\"pre\">as_nomfournisseur()</span></code> ou des sous-classes pourraient vouloir fournir des données pour surcharger la génération de la chaîne SQL. Voir <a class=\"reference internal\" href=\"/fr/5.1/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> pour un exemple d’utilisation.</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Fonctionne comme la méthode <code class=\"docutils literal notranslate\"><span class=\"pre\">as_sql()</span></code>. Lorsqu’une expression est compilée avec <code class=\"docutils literal notranslate\"><span class=\"pre\">compiler.compile()</span></code>, Django essaie d’abord d’appeler <code class=\"docutils literal notranslate\"><span class=\"pre\">as_nomfournisseur()</span></code> où <code class=\"docutils literal notranslate\"><span class=\"pre\">nomfournisseur</span></code> correspond au nom du fournisseur de la base de données utilisée pour exécuter la requête. Pour les moteurs fournis avec Django, <code class=\"docutils literal notranslate\"><span class=\"pre\">nomfournisseur</span></code> peut correspondre à <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> ou <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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Doit renvoyer la recherche nommée <code class=\"docutils literal notranslate\"><span class=\"pre\">lookup_name</span></code>. Par exemple, en renvoyant <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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Doit renvoyer la transformation nommée <code class=\"docutils literal notranslate\"><span class=\"pre\">transform_name</span></code>. Par exemple, en renvoyant <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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Définit le type de classe renvoyée par la méthode <code class=\"docutils literal notranslate\"><span class=\"pre\">get_lookup()</span></code>. Il doit s’agir d’une instance <a class=\"reference internal\" href=\"/fr/5.1/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>Référence de <code class=\"docutils literal notranslate\"><span class=\"pre\">Transform</span></code><a class=\"heading-anchor\" href=\"#transform-reference\"><span class=\"visually-hidden\">Lien vers cette rubrique</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Transform</span></code> est une classe générique pour implémenter des transformations de champs. Un exemple typique est <code class=\"docutils literal notranslate\"><span class=\"pre\">__year</span></code> (année) qui transforme un champ <code class=\"docutils literal notranslate\"><span class=\"pre\">DateField</span></code> en champ <code class=\"docutils literal notranslate\"><span class=\"pre\">IntegerField</span></code>.</p>\n<p>La notation utilisée pour placer <code class=\"docutils literal notranslate\"><span class=\"pre\">Transform</span></code> dans une expression de recherche est <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;expression&gt;__&lt;transformation&gt;</span></code> (par ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">date__year</span></code>).</p>\n<p>Cette classe respecte l’<a class=\"reference internal\" href=\"#query-expression\"><span class=\"std std-ref\">API d’expression de recherche</span></a>, ce qui signifie que vous pouvez utiliser <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;expression&gt;__&lt;transform1&gt;__&lt;transform2&gt;</span></code>. Il s’agit d’une <a class=\"reference internal\" href=\"/fr/5.1/ref/models/expressions/#func-expressions\"><span class=\"std std-ref\">expression Func()</span></a> spécialisée qui n’accepte qu’un seul paramètre. Elle peut également être utilisée dans la partie droite d’un filtre ou directement sous forme d’annotation.</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Une valeur booléenne indiquant si cette transformation doit s’appliquer aux deux parties <code class=\"docutils literal notranslate\"><span class=\"pre\">lhs</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">rhs</span></code>. Les transformations bilatérales seront appliquées à <code class=\"docutils literal notranslate\"><span class=\"pre\">rhs</span></code> dans leur ordre d’apparition dans l’expression de requête. Par défaut, cet attribut vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>. Pour des exemples d’utilisation, voir <a class=\"reference internal\" href=\"/fr/5.1/howto/custom-lookups/\"><span class=\"doc\">Écriture d’expressions de requêtes personnalisées</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>La partie gauche de l’expression, ce qui est transformé. Elle doit respecter l’<a class=\"reference internal\" href=\"#query-expression\"><span class=\"std std-ref\">API d’expression de recherche</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Le nom de la transformation, utilisé pour l’identifier lors de l’analyse des expressions de recherche. Il ne peut pas contenir la chaîne <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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Définit la classe que cette transformation produit. Il doit s’agir d’une instance de <a class=\"reference internal\" href=\"/fr/5.1/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>. Par défaut, c’est la même classe que <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>Référence de <code class=\"docutils literal notranslate\"><span class=\"pre\">Lookup</span></code><a class=\"heading-anchor\" href=\"#lookup-reference\"><span class=\"visually-hidden\">Lien vers cette rubrique</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Lookup</span></code> est une classe générique pour implémenter des recherches. Une recherche est une expression de requête avec un côté gauche <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>, un côté droit <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> et un nom <code class=\"docutils literal notranslate\"><span class=\"pre\">lookup_name</span></code> utilisé pour produire une comparaison booléenne entre <code class=\"docutils literal notranslate\"><span class=\"pre\">lhs</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">rhs</span></code> telle que <code class=\"docutils literal notranslate\"><span class=\"pre\">lhs</span> <span class=\"pre\">in</span> <span class=\"pre\">rhs</span></code> ou <code class=\"docutils literal notranslate\"><span class=\"pre\">lhs</span> <span class=\"pre\">&gt;</span> <span class=\"pre\">rhs</span></code>.</p>\n<p>La notation principale pour utiliser une recherche dans une expression est <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;lhs&gt;__&lt;nom_recherche&gt;=&lt;rhs&gt;</span></code>. Les recherches peuvent également être utilisées directement dans les filtres de <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>ou dans les annotations</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Le côté gauche, le contenu recherché. L’objet respecte typiquement l’<a class=\"reference internal\" href=\"#query-expression\"><span class=\"std std-ref\">API d’expression de recherche</span></a>. Cela peut aussi être une simple valeur.</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Le côté droit, ce qui est comparé avec <code class=\"docutils literal notranslate\"><span class=\"pre\">lhs</span></code>. Il peut s’agir d’une valeur brute ou de quelque chose qui se compile en SQL, typiquement un objet <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> ou un <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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Le nom de la recherche, utilisé pour l’identifier lors de l’analyse des expressions de recherche. Il ne peut pas contenir la chaîne <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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> par défaut. Lorsque <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> est une simple valeur, <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> détermine s’il doit être préparé pour une utilisation comme paramètre dans une requête. Dans ce but, <code class=\"docutils literal notranslate\"><span class=\"pre\">lhs.output_field.get_prep_value()</span></code> est appelée si elle est définie, ou sinon <code class=\"docutils literal notranslate\"><span class=\"pre\">rhs</span></code> est enveloppé dans une instance <a class=\"reference internal\" href=\"/fr/5.1/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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie un tuple <code class=\"docutils literal notranslate\"><span class=\"pre\">(lhs_string,</span> <span class=\"pre\">lhs_params)</span></code>, tel que renvoyé par <code class=\"docutils literal notranslate\"><span class=\"pre\">compiler.compile(lhs)</span></code>. Cette méthode peut être surchargée pour affiner le traitement de <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> est un objet <code class=\"docutils literal notranslate\"><span class=\"pre\">SQLCompiler</span></code> destiné à la compilation de <code class=\"docutils literal notranslate\"><span class=\"pre\">lhs</span></code>, comme avec <code class=\"docutils literal notranslate\"><span class=\"pre\">compiler.compile(lhs)</span></code>. Le paramètre <code class=\"docutils literal notranslate\"><span class=\"pre\">connection</span></code> peut être utilisé pour compiler du SQL selon un fournisseur particulier. Si <code class=\"docutils literal notranslate\"><span class=\"pre\">lhs</span></code> n’est pas <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>, ce paramètre est employé comme <code class=\"docutils literal notranslate\"><span class=\"pre\">lhs</span></code> à la place de <code class=\"docutils literal notranslate\"><span class=\"pre\">self.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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Se comporte de la même manière que <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>, mais pour le côté droit.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>","rootId":"module-django.db.models.lookups","toc":[{"title":"API d’inscription","anchor":"registration-api","children":[]},{"title":"L’API d’expression de recherche","anchor":"the-query-expression-api","children":[]},{"title":"Référence de Transform","anchor":"transform-reference","children":[]},{"title":"Référence de Lookup","anchor":"lookup-reference","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"Référence de l’API","url":"/fr/5.1/ref/"},{"docname":"ref/models/index","title":"Modèles","url":"/fr/5.1/ref/models/"}],"prev":{"docname":"ref/models/querysets","title":"Référence de l’API QuerySet","url":"/fr/5.1/ref/models/querysets/"},"next":{"docname":"ref/models/expressions","title":"Expressions de requête","url":"/fr/5.1/ref/models/expressions/"},"formats":{"html":"/fr/5.1/ref/models/lookups/","markdown":"/fr/5.1/ref/models/lookups.md","json":"/fr/5.1/ref/models/lookups.json"},"source":"https://github.com/django/django/blob/stable/5.1.x/docs/ref/models/lookups.txt","official":"https://docs.djangoproject.com/fr/5.1/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"]}