{"title":"Fonctions de base de données","version":"3.0","locale":"fr","docname":"ref/models/database-functions","url":"/fr/3.0/ref/models/database-functions/","canonical":"https://djangodocs.dev/fr/3.0/ref/models/database-functions/","summary":"Les classes documentées ci-dessous permettent d’exploiter dans Django les fonctions fournies par la base de données sous-jacente telles que les annotations…","html":"<span id=\"database-functions\"></span><h1>Fonctions de base de données<a class=\"heading-anchor\" href=\"#module-django.db.models.functions\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Les classes documentées ci-dessous permettent d’exploiter dans Django les fonctions fournies par la base de données sous-jacente telles que les annotations, les agrégations ou les filtres. Les fonctions sont également des <a class=\"reference internal\" href=\"/fr/3.0/ref/models/expressions/\"><span class=\"doc\">expressions</span></a>, elles peuvent donc être utilisées et combinées avec d’autres expressions comme les <a class=\"reference internal\" href=\"/fr/3.0/ref/models/querysets/#aggregation-functions\"><span class=\"std std-ref\">fonctions d’agrégation</span></a>.</p>\n<p>Nous allons utiliser le modèle suivant dans les exemples de chaque fonction :</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=\"nc\">Author</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    age <span class=\"o\">=</span> models<span class=\"o\">.</span>PositiveIntegerField<span class=\"p\">(</span>null<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> blank<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    alias <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">,</span> null<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> blank<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    goes_by <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">,</span> null<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> blank<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Nous ne recommandons généralement pas de définir <code class=\"docutils literal notranslate\">null=True</code> pour les champs <code class=\"docutils literal notranslate\">CharField</code> car cela permet au champ de posséder deux valeurs « vides » différentes, mais nous l’utilisons ici pour l’exemple <code class=\"docutils literal notranslate\">Coalesce</code> ci-dessous.</p>\n<section id=\"comparison-and-conversion-functions\">\n<span id=\"comparison-functions\"></span><h2>Fonctions de comparaison et de conversion<a class=\"heading-anchor\" href=\"#comparison-and-conversion-functions\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"cast\">\n<h3><code class=\"docutils literal notranslate\">Cast</code><a class=\"heading-anchor\" href=\"#cast\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Cast\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Cast</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Cast\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Force le type de résultat de <code class=\"docutils literal notranslate\">expression</code> à celui de <code class=\"docutils literal notranslate\">output_field</code>.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> FloatField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Cast\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>age<span class=\"o\">=</span><span class=\"mi\">25</span><span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>author <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   age_as_float<span class=\"o\">=</span>Cast<span class=\"p\">(</span><span class=\"s1\">&#39;age&#39;</span><span class=\"p\">,</span> output_field<span class=\"o\">=</span>FloatField<span class=\"p\">()),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>author<span class=\"o\">.</span>age_as_float<span class=\"p\">)</span>\n<span class=\"go\">25.0</span>\n</code></pre></div>\n</section>\n<section id=\"coalesce\">\n<h3><code class=\"docutils literal notranslate\">Coalesce</code><a class=\"heading-anchor\" href=\"#coalesce\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Coalesce\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Coalesce</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Coalesce\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Accepte une liste d’au moins deux noms de champ ou expressions et renvoie la première valeur non nulle (notez qu’une chaîne vide n’est pas considérée comme une valeur nulle). Chaque paramètre doit être d’un type similaire ; si vous mélangez des textes et des nombres, la base de données produira une erreur.</p>\n<p>Exemples d’utilisation :</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=\"c1\"># Get a screen name from least to most public</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Sum<span class=\"p\">,</span> Value <span class=\"k\">as</span> V\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Coalesce\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">,</span> goes_by<span class=\"o\">=</span><span class=\"s1\">&#39;Maggie&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>author <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   screen_name<span class=\"o\">=</span>Coalesce<span class=\"p\">(</span><span class=\"s1\">&#39;alias&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;goes_by&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;name&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>author<span class=\"o\">.</span>screen_name<span class=\"p\">)</span>\n<span class=\"go\">Maggie</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Prevent an aggregate Sum() from returning None</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>aggregated <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>aggregate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   combined_age<span class=\"o\">=</span>Coalesce<span class=\"p\">(</span>Sum<span class=\"p\">(</span><span class=\"s1\">&#39;age&#39;</span><span class=\"p\">),</span> V<span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>   combined_age_default<span class=\"o\">=</span>Sum<span class=\"p\">(</span><span class=\"s1\">&#39;age&#39;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>aggregated<span class=\"p\">[</span><span class=\"s1\">&#39;combined_age&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">0</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>aggregated<span class=\"p\">[</span><span class=\"s1\">&#39;combined_age_default&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">None</span>\n</code></pre></div>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Avertissement</p>\n<p>Avec MySQL, il est possible qu’une valeur Python transmise à <code class=\"docutils literal notranslate\">Coalesce</code> soit convertie en un type incorrect, sauf dans le cas où le bon type de base de données est explicitement forcé :</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=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> DateTimeField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Cast<span class=\"p\">,</span> Coalesce\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"kn\">import</span> timezone\n<span class=\"gp\">&gt;&gt;&gt; </span>now <span class=\"o\">=</span> timezone<span class=\"o\">.</span>now<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Coalesce<span class=\"p\">(</span><span class=\"s1\">&#39;updated&#39;</span><span class=\"p\">,</span> Cast<span class=\"p\">(</span>now<span class=\"p\">,</span> DateTimeField<span class=\"p\">()))</span>\n</code></pre></div>\n</aside>\n</section>\n<section id=\"greatest\">\n<h3><code class=\"docutils literal notranslate\">Greatest</code><a class=\"heading-anchor\" href=\"#greatest\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Greatest\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Greatest</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Greatest\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Accepte une liste d’au moins deux noms de champ ou expressions et renvoie la plus grande valeur. Chaque paramètre doit être d’un type similaire ; si vous mélangez des textes et des nombres, la base de données produira une erreur.</p>\n<p>Exemple d’utilisation :</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=\"nc\">Blog</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    body <span class=\"o\">=</span> models<span class=\"o\">.</span>TextField<span class=\"p\">()</span>\n    modified <span class=\"o\">=</span> models<span class=\"o\">.</span>DateTimeField<span class=\"p\">(</span>auto_now<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">Comment</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    body <span class=\"o\">=</span> models<span class=\"o\">.</span>TextField<span class=\"p\">()</span>\n    modified <span class=\"o\">=</span> models<span class=\"o\">.</span>DateTimeField<span class=\"p\">(</span>auto_now<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    blog <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>Blog<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Greatest\n<span class=\"o\">&gt;&gt;&gt;</span> blog <span class=\"o\">=</span> Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>body<span class=\"o\">=</span><span class=\"s1\">&#39;Greatest is the best.&#39;</span><span class=\"p\">)</span>\n<span class=\"o\">&gt;&gt;&gt;</span> comment <span class=\"o\">=</span> Comment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>body<span class=\"o\">=</span><span class=\"s1\">&#39;No, Least is better.&#39;</span><span class=\"p\">,</span> blog<span class=\"o\">=</span>blog<span class=\"p\">)</span>\n<span class=\"o\">&gt;&gt;&gt;</span> comments <span class=\"o\">=</span> Comment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>last_updated<span class=\"o\">=</span>Greatest<span class=\"p\">(</span><span class=\"s1\">&#39;modified&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;blog__modified&#39;</span><span class=\"p\">))</span>\n<span class=\"o\">&gt;&gt;&gt;</span> annotated_comment <span class=\"o\">=</span> comments<span class=\"o\">.</span>get<span class=\"p\">()</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">annotated_comment.last_updated</code> sera la valeur la plus récente entre <code class=\"docutils literal notranslate\">blog.modified</code> et <code class=\"docutils literal notranslate\">comment.modified</code>.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Avertissement</p>\n<p>Le comportement de <code class=\"docutils literal notranslate\">Greatest</code> varie entre les bases de données lorsqu’une ou plusieurs des expressions ont la valeur <code class=\"docutils literal notranslate\">null</code>:</p>\n<ul class=\"simple\">\n<li><p>PostgreSQL : <code class=\"docutils literal notranslate\">Greatest</code> renvoie l’expression non nulle la plus grande, ou <code class=\"docutils literal notranslate\">null</code> si toutes les expressions valent <code class=\"docutils literal notranslate\">null</code>.</p></li>\n<li><p>SQLite, Oracle et MySQL : si l’une des expressions vaut <code class=\"docutils literal notranslate\">null</code>, <code class=\"docutils literal notranslate\">Greatest</code> renvoie <code class=\"docutils literal notranslate\">null</code>.</p></li>\n</ul>\n<p>Le comportement de PostgreSQL peut être émulé à l’aide de <code class=\"docutils literal notranslate\">Coalesce</code> si vous avez une valeur minimum adéquate à fournir comme valeur par défaut.</p>\n</aside>\n</section>\n<section id=\"least\">\n<h3><code class=\"docutils literal notranslate\">Least</code><a class=\"heading-anchor\" href=\"#least\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Least\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Least</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Least\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Accepte une liste d’au moins deux noms de champ ou expressions et renvoie la plus petite valeur. Chaque paramètre doit être d’un type similaire ; si vous mélangez des textes et des nombres, la base de données produira une erreur.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Avertissement</p>\n<p>Le comportement de <code class=\"docutils literal notranslate\">Least</code> varie entre les bases de données lorsqu’une ou plusieurs des expressions ont la valeur <code class=\"docutils literal notranslate\">null</code>:</p>\n<ul class=\"simple\">\n<li><p>PostgreSQL : <code class=\"docutils literal notranslate\">Least</code> renvoie l’expression non nulle la plus petite, ou <code class=\"docutils literal notranslate\">null</code> si toutes les expressions valent <code class=\"docutils literal notranslate\">null</code>.</p></li>\n<li><p>SQLite, Oracle et MySQL : si l’une des expressions vaut <code class=\"docutils literal notranslate\">null</code>, <code class=\"docutils literal notranslate\">Least</code> renvoie <code class=\"docutils literal notranslate\">null</code>.</p></li>\n</ul>\n<p>Le comportement de PostgreSQL peut être émulé à l’aide de <code class=\"docutils literal notranslate\">Coalesce</code> si vous avez une valeur maximum adéquate à fournir comme valeur par défaut.</p>\n</aside>\n</section>\n<section id=\"nullif\">\n<h3><code class=\"docutils literal notranslate\">NullIf</code><a class=\"heading-anchor\" href=\"#nullif\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.NullIf\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">NullIf</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression1</em>, <em class=\"sig-param\">expression2</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.NullIf\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<aside class=\"version-note version-added\" data-version=\"2.2\" role=\"note\">\n<p class=\"version-note-title\">New in Django 2.2</p></aside>\n<p>Accepte deux expressions et renvoie <code class=\"docutils literal notranslate\">None</code> si elles sont égales, sinon renvoie <code class=\"docutils literal notranslate\">expression1</code>.</p>\n<aside class=\"admonition-caveats-on-oracle admonition\" role=\"note\">\n<p class=\"admonition-title\">Avertissement pour Oracle</p>\n<p>En raison d’une <a class=\"reference internal\" href=\"/fr/3.0/ref/databases/#oracle-null-empty-strings\"><span class=\"std std-ref\">convention Oracle</span></a>, cette fonction renvoie la chaîne vide au lieu de <code class=\"docutils literal notranslate\">None</code> lorsque les expressions sont de type <a class=\"reference internal\" href=\"/fr/3.0/ref/models/fields/#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\">CharField</code></a>.</p>\n<p>La transmission de <code class=\"docutils literal notranslate\">Value(None)</code> à <code class=\"docutils literal notranslate\">expression1</code> est interdite avec Oracle car cette base de données n’accepte pas <code class=\"docutils literal notranslate\">NULL</code> comme premier paramètre.</p>\n</aside>\n</section>\n</section>\n<section id=\"date-functions\">\n<span id=\"id1\"></span><h2>Fonctions de date<a class=\"heading-anchor\" href=\"#date-functions\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Nous allons utiliser le modèle suivant dans les exemples de chaque fonction :</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=\"nc\">Experiment</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    start_datetime <span class=\"o\">=</span> models<span class=\"o\">.</span>DateTimeField<span class=\"p\">()</span>\n    start_date <span class=\"o\">=</span> models<span class=\"o\">.</span>DateField<span class=\"p\">(</span>null<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> blank<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    start_time <span class=\"o\">=</span> models<span class=\"o\">.</span>TimeField<span class=\"p\">(</span>null<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> blank<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    end_datetime <span class=\"o\">=</span> models<span class=\"o\">.</span>DateTimeField<span class=\"p\">(</span>null<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> blank<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    end_date <span class=\"o\">=</span> models<span class=\"o\">.</span>DateField<span class=\"p\">(</span>null<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> blank<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    end_time <span class=\"o\">=</span> models<span class=\"o\">.</span>TimeField<span class=\"p\">(</span>null<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> blank<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<section id=\"extract\">\n<h3><code class=\"docutils literal notranslate\">Extract</code><a class=\"heading-anchor\" href=\"#extract\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Extract\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Extract</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">lookup_name<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Extract\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Extrait un composant de date sous forme de nombre.</p>\n<p>Accepte une <code class=\"docutils literal notranslate\">expression</code> représentant un champ <code class=\"docutils literal notranslate\">DateField</code>, <code class=\"docutils literal notranslate\">DateTimeField</code>, <code class=\"docutils literal notranslate\">TimeField</code> ou <code class=\"docutils literal notranslate\">DurationField</code> ainsi qu’un nom d’expression <code class=\"docutils literal notranslate\">lookup_name</code>, et renvoie la partie de date référencée par <code class=\"docutils literal notranslate\">lookup_name</code> sous forme de champ <code class=\"docutils literal notranslate\">IntegerField</code>. Django utilise habituellement la fonction d’extraction des bases de données, il est donc possible d’utiliser n’importe quel nom <code class=\"docutils literal notranslate\">lookup_name</code> pris en charge par la base de données en cours. Il est possible de passer aussi une sous-classe de <code class=\"docutils literal notranslate\">tzinfo</code>, habituellement fournie par <code class=\"docutils literal notranslate\">pytz</code>, pour extraire une valeur dans un fuseau horaire spécifique.</p>\n<p>Étant donnée la date/heure <code class=\"docutils literal notranslate\">2015-06-15 23:30:01.000321+00:00</code>, les valeurs <code class=\"docutils literal notranslate\">lookup_name</code> possibles renvoient :</p>\n<ul class=\"simple\">\n<li><p>« year » (année) : 2015</p></li>\n<li><p>« iso_year » (année ISO) : 2015</p></li>\n<li><p>« quarter »: 2</p></li>\n<li><p>« month » (mois) : 6</p></li>\n<li><p>« day » (jour) : 15</p></li>\n<li><p>« week »: 25</p></li>\n<li><p>« week_day » (jour de semaine) : 2</p></li>\n<li><p>« hour » (heure) : 23</p></li>\n<li><p>« minute »: 30</p></li>\n<li><p>« second »: 1</p></li>\n</ul>\n<p>Si un fuseau horaire différent comme <code class=\"docutils literal notranslate\">Australia/Melbourne</code> est actif dans Django, la date/heure est convertie dans le fuseau avant que la valeur soit extraite. Le décalage horaire de Melbourne dans la date d’exemple ci-dessus est +10:00. Les valeurs renvoyées lorsque ce fuseau est actif seront les mêmes que ci-dessus, à l’exception de :</p>\n<ul class=\"simple\">\n<li><p>« day »: 16</p></li>\n<li><p>« week_day »: 3</p></li>\n<li><p>« hour »: 9</p></li>\n</ul>\n<aside class=\"admonition-week-day-values admonition\" role=\"note\">\n<p class=\"admonition-title\">Valeurs <code class=\"docutils literal notranslate\">week_day</code></p>\n<p>L’extraction <code class=\"docutils literal notranslate\">week_day</code> est calculée différemment de la plupart des bases de données et des fonctions Python standards. Cette fonction renvoie <code class=\"docutils literal notranslate\">1</code> pour dimanche, <code class=\"docutils literal notranslate\">2</code> pour lundi, jusqu’à <code class=\"docutils literal notranslate\">7</code> pour samedi.</p>\n<p>Le calcul équivalent en Python est :</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=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> datetime\n<span class=\"gp\">&gt;&gt;&gt; </span>dt <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"p\">(</span>dt<span class=\"o\">.</span>isoweekday<span class=\"p\">()</span> <span class=\"o\">%</span> <span class=\"mi\">7</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n<span class=\"go\">2</span>\n</code></pre></div>\n</aside>\n<aside class=\"admonition-week-values admonition\" role=\"note\">\n<p class=\"admonition-title\">Valeurs <code class=\"docutils literal notranslate\">week</code></p>\n<p>L’expression de recherche <code class=\"docutils literal notranslate\">week</code> est calculée sur la base du standard <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/ISO-8601\">ISO-8601</a>, c’est-à-dire qu’une semaine commence un lundi. La première semaine d’une année est celle qui contient le premier jeudi de l’année, c’est-à-dire que la première semaine à sa majorité (4 ou plus) de jours dans l’année. La valeur renvoyée se situe dans l’intervalle 1 à 52 ou 53.</p>\n</aside>\n<p>Chaque valeur <code class=\"docutils literal notranslate\">lookup_name</code> ci-dessus possède une sous-classe de <code class=\"docutils literal notranslate\">Extract</code> correspondante (énumérées ci-dessous) qui devrait être utilisée au lieu de l’équivalent plus bavard, c’est-à-dire <code class=\"docutils literal notranslate\">ExtractYear(...)</code> au lieu de <code class=\"docutils literal notranslate\">Extract(..., lookup_name='year')</code>.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> datetime\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Extract\n<span class=\"gp\">&gt;&gt;&gt; </span>start <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>end <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   start_datetime<span class=\"o\">=</span>start<span class=\"p\">,</span> start_date<span class=\"o\">=</span>start<span class=\"o\">.</span>date<span class=\"p\">(),</span>\n<span class=\"gp\">... </span>   end_datetime<span class=\"o\">=</span>end<span class=\"p\">,</span> end_date<span class=\"o\">=</span>end<span class=\"o\">.</span>date<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Add the experiment start year as a field in the QuerySet.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>experiment <span class=\"o\">=</span> Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   start_year<span class=\"o\">=</span>Extract<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;year&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>experiment<span class=\"o\">.</span>start_year\n<span class=\"go\">2015</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># How many experiments completed in the same year in which they started?</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   start_datetime__year<span class=\"o\">=</span>Extract<span class=\"p\">(</span><span class=\"s1\">&#39;end_datetime&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;year&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>count<span class=\"p\">()</span>\n<span class=\"go\">1</span>\n</code></pre></div>\n<section id=\"datefield-extracts\">\n<h4>Extractions <code class=\"docutils literal notranslate\">DateField</code><a class=\"heading-anchor\" href=\"#datefield-extracts\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ExtractYear\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ExtractYear</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ExtractYear\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'year'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ExtractIsoYear\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ExtractIsoYear</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ExtractIsoYear\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"2.2\" role=\"note\">\n<p class=\"version-note-title\">New in Django 2.2</p></aside>\n<p>Renvoie l’année avec numéro de semaine selon ISO-8601.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'iso_year'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ExtractMonth\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ExtractMonth</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ExtractMonth\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'month'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ExtractDay\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ExtractDay</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ExtractDay\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'day'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ExtractWeekDay\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ExtractWeekDay</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ExtractWeekDay\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'week_day'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ExtractWeek\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ExtractWeek</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ExtractWeek\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'week'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ExtractQuarter\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ExtractQuarter</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ExtractQuarter\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'quarter'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<p>Il s’agit d’équivalents logiques à <code class=\"docutils literal notranslate\">Extract('champ_date', lookup_name)</code>. Chaque classe est aussi une classe <code class=\"docutils literal notranslate\">Transform</code> inscrite pour les champs <code class=\"docutils literal notranslate\">DateField</code> et <code class=\"docutils literal notranslate\">DateTimeField</code> comme <code class=\"docutils literal notranslate\">__(lookup_name)</code>, par ex. <code class=\"docutils literal notranslate\">__year</code>.</p>\n<p>Comme les champs <code class=\"docutils literal notranslate\">DateField</code> n’ont pas de composant d’heure, seules les sous-classes de <code class=\"docutils literal notranslate\">Extract</code> qui s’appliquent aux parties de date peuvent être utilisées avec <code class=\"docutils literal notranslate\">DateField</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=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> datetime\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"kn\">import</span> timezone\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> <span class=\"p\">(</span>\n<span class=\"gp\">... </span>    ExtractDay<span class=\"p\">,</span> ExtractMonth<span class=\"p\">,</span> ExtractQuarter<span class=\"p\">,</span> ExtractWeek<span class=\"p\">,</span>\n<span class=\"gp\">... </span>    ExtractWeekDay<span class=\"p\">,</span> ExtractIsoYear<span class=\"p\">,</span> ExtractYear<span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>start_2015 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"mi\">23</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>end_2015 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">16</span><span class=\"p\">,</span> <span class=\"mi\">13</span><span class=\"p\">,</span> <span class=\"mi\">11</span><span class=\"p\">,</span> <span class=\"mi\">27</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   start_datetime<span class=\"o\">=</span>start_2015<span class=\"p\">,</span> start_date<span class=\"o\">=</span>start_2015<span class=\"o\">.</span>date<span class=\"p\">(),</span>\n<span class=\"gp\">... </span>   end_datetime<span class=\"o\">=</span>end_2015<span class=\"p\">,</span> end_date<span class=\"o\">=</span>end_2015<span class=\"o\">.</span>date<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    year<span class=\"o\">=</span>ExtractYear<span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    isoyear<span class=\"o\">=</span>ExtractIsoYear<span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    quarter<span class=\"o\">=</span>ExtractQuarter<span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    month<span class=\"o\">=</span>ExtractMonth<span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    week<span class=\"o\">=</span>ExtractWeek<span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    day<span class=\"o\">=</span>ExtractDay<span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    weekday<span class=\"o\">=</span>ExtractWeekDay<span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s1\">&#39;year&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;isoyear&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;quarter&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;month&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;week&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;day&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;weekday&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>get<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    end_date__year<span class=\"o\">=</span>ExtractYear<span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"go\">{&#39;year&#39;: 2015, &#39;isoyear&#39;: 2015, &#39;quarter&#39;: 2, &#39;month&#39;: 6, &#39;week&#39;: 25,</span>\n<span class=\"go\"> &#39;day&#39;: 15, &#39;weekday&#39;: 2}</span>\n</code></pre></div>\n</section>\n<section id=\"datetimefield-extracts\">\n<h4>Extractions <code class=\"docutils literal notranslate\">DateTimeField</code><a class=\"heading-anchor\" href=\"#datetimefield-extracts\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>En plus de ce qui suit, toutes les extractions pour <code class=\"docutils literal notranslate\">DateField</code> énumérées ci-dessus peuvent aussi être utilisées pour <code class=\"docutils literal notranslate\">DateTimeField</code>.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ExtractHour\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ExtractHour</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ExtractHour\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'hour'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ExtractMinute\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ExtractMinute</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ExtractMinute\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'minute'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ExtractSecond\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ExtractSecond</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ExtractSecond\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'second'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<p>Il s’agit d’équivalents logiques à <code class=\"docutils literal notranslate\">Extract('champ_datetime', lookup_name)</code>. Chaque classe est aussi une classe <code class=\"docutils literal notranslate\">Transform</code> inscrite pour le champ <code class=\"docutils literal notranslate\">DateTimeField</code> comme <code class=\"docutils literal notranslate\">__(lookup_name)</code>, par ex. <code class=\"docutils literal notranslate\">__minute</code>.</p>\n<p>Exemples <code class=\"docutils literal notranslate\">DateTimeField</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=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> datetime\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"kn\">import</span> timezone\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> <span class=\"p\">(</span>\n<span class=\"gp\">... </span>    ExtractDay<span class=\"p\">,</span> ExtractHour<span class=\"p\">,</span> ExtractMinute<span class=\"p\">,</span> ExtractMonth<span class=\"p\">,</span>\n<span class=\"gp\">... </span>    ExtractQuarter<span class=\"p\">,</span> ExtractSecond<span class=\"p\">,</span> ExtractWeek<span class=\"p\">,</span> ExtractWeekDay<span class=\"p\">,</span>\n<span class=\"gp\">... </span>    ExtractYear<span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>start_2015 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"mi\">23</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>end_2015 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">16</span><span class=\"p\">,</span> <span class=\"mi\">13</span><span class=\"p\">,</span> <span class=\"mi\">11</span><span class=\"p\">,</span> <span class=\"mi\">27</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   start_datetime<span class=\"o\">=</span>start_2015<span class=\"p\">,</span> start_date<span class=\"o\">=</span>start_2015<span class=\"o\">.</span>date<span class=\"p\">(),</span>\n<span class=\"gp\">... </span>   end_datetime<span class=\"o\">=</span>end_2015<span class=\"p\">,</span> end_date<span class=\"o\">=</span>end_2015<span class=\"o\">.</span>date<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    year<span class=\"o\">=</span>ExtractYear<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    isoyear<span class=\"o\">=</span>ExtractIsoYear<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    quarter<span class=\"o\">=</span>ExtractQuarter<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    month<span class=\"o\">=</span>ExtractMonth<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    week<span class=\"o\">=</span>ExtractWeek<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    day<span class=\"o\">=</span>ExtractDay<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    weekday<span class=\"o\">=</span>ExtractWeekDay<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    hour<span class=\"o\">=</span>ExtractHour<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    minute<span class=\"o\">=</span>ExtractMinute<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    second<span class=\"o\">=</span>ExtractSecond<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>values<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"s1\">&#39;year&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;isoyear&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;month&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;week&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;day&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s1\">&#39;weekday&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;hour&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;minute&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;second&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>get<span class=\"p\">(</span>end_datetime__year<span class=\"o\">=</span>ExtractYear<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">))</span>\n<span class=\"go\">{&#39;year&#39;: 2015, &#39;isoyear&#39;: 2015, &#39;quarter&#39;: 2, &#39;month&#39;: 6, &#39;week&#39;: 25,</span>\n<span class=\"go\"> &#39;day&#39;: 15, &#39;weekday&#39;: 2, &#39;hour&#39;: 23, &#39;minute&#39;: 30, &#39;second&#39;: 1}</span>\n</code></pre></div>\n<p>Lorsque <a class=\"reference internal\" href=\"/fr/3.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\">USE_TZ</code></a> vaut <code class=\"docutils literal notranslate\">True</code>, les dates/heures sont stockées en UTC dans la base de données. Si un autre fuseau horaire est actif dans Django, la date/heure est convertie dans ce fuseau avant que la valeur soit extraite. L’exemple ci-dessous convertit dans le fuseau horaire de Melbourne (UTC +10:00), ce qui modifie les valeurs du jour, du jour de la semaine et de l’heure qui sont renvoyées :</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=\"kn\">import</span> <span class=\"nn\">pytz</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>melb <span class=\"o\">=</span> pytz<span class=\"o\">.</span>timezone<span class=\"p\">(</span><span class=\"s1\">&#39;Australia/Melbourne&#39;</span><span class=\"p\">)</span>  <span class=\"c1\"># UTC+10:00</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">with</span> timezone<span class=\"o\">.</span>override<span class=\"p\">(</span>melb<span class=\"p\">):</span>\n<span class=\"gp\">... </span>   Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>       day<span class=\"o\">=</span>ExtractDay<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>       weekday<span class=\"o\">=</span>ExtractWeekDay<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>       hour<span class=\"o\">=</span>ExtractHour<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>   <span class=\"p\">)</span><span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s1\">&#39;day&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;weekday&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;hour&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>get<span class=\"p\">(</span>\n<span class=\"gp\">... </span>       end_datetime__year<span class=\"o\">=</span>ExtractYear<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>   <span class=\"p\">)</span>\n<span class=\"go\">{&#39;day&#39;: 16, &#39;weekday&#39;: 3, &#39;hour&#39;: 9}</span>\n</code></pre></div>\n<p>Le passage explicite du fuseau horaire à la fonction <code class=\"docutils literal notranslate\">Extract</code> fonctionne de la même manière et prend la priorité sur le fuseau horaire actif :</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=\"kn\">import</span> <span class=\"nn\">pytz</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>melb <span class=\"o\">=</span> pytz<span class=\"o\">.</span>timezone<span class=\"p\">(</span><span class=\"s1\">&#39;Australia/Melbourne&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    day<span class=\"o\">=</span>ExtractDay<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>melb<span class=\"p\">),</span>\n<span class=\"gp\">... </span>    weekday<span class=\"o\">=</span>ExtractWeekDay<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>melb<span class=\"p\">),</span>\n<span class=\"gp\">... </span>    hour<span class=\"o\">=</span>ExtractHour<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>melb<span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s1\">&#39;day&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;weekday&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;hour&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>get<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    end_datetime__year<span class=\"o\">=</span>ExtractYear<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"go\">{&#39;day&#39;: 16, &#39;weekday&#39;: 3, &#39;hour&#39;: 9}</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"now\">\n<h3><code class=\"docutils literal notranslate\">Now</code><a class=\"heading-anchor\" href=\"#now\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Now\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Now</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Now\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie la date et l’heure courante du serveur de base de données au moment où la requête est exécutée, typiquement en utilisant le code SQL <code class=\"docutils literal notranslate\">CURRENT_TIMESTAMP</code>.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Now\n<span class=\"gp\">&gt;&gt;&gt; </span>Article<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>published__lte<span class=\"o\">=</span>Now<span class=\"p\">())</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: How to Django&gt;]&gt;</span>\n</code></pre></div>\n<aside class=\"admonition-postgresql-considerations admonition\" role=\"note\">\n<p class=\"admonition-title\">Considérations sur PostgreSQL</p>\n<p>Avec PostgreSQL, l’instruction <code class=\"docutils literal notranslate\">CURRENT_TIMESTAMP</code> renvoie l’heure du début de la transaction actuelle. Par conséquent, pour garantir la compatibilité entre bases de données, <code class=\"docutils literal notranslate\">Now()</code> utilise <code class=\"docutils literal notranslate\">STATEMENT_TIMESTAMP</code> à la place. Si vous avez besoin de l’horodatage de la transaction, utilisez <a class=\"reference internal\" href=\"/fr/3.0/ref/contrib/postgres/functions/#django.contrib.postgres.functions.TransactionNow\" title=\"django.contrib.postgres.functions.TransactionNow\"><code class=\"xref py py-class docutils literal notranslate\">django.contrib.postgres.functions.TransactionNow</code></a>.</p>\n</aside>\n</section>\n<section id=\"trunc\">\n<h3><code class=\"docutils literal notranslate\">Trunc</code><a class=\"heading-anchor\" href=\"#trunc\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Trunc\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Trunc</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">kind</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">is_dst<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Trunc\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Tronque une date jusqu’à un composant significatif.</p>\n<p>Lorsque vous ne voulez que savoir si quelque chose s’est produit durant une année, une heure ou un jour particulier, mais pas à quelle  seconde, <code class=\"docutils literal notranslate\">Trunc</code> (et ses sous-classes) peut être utile pour filtrer ou agréger vos données. Par exemple, vous pouvez utiliser <code class=\"docutils literal notranslate\">Trunc</code> pour calculer le nombre de ventes par jour.</p>\n<p><code class=\"docutils literal notranslate\">Trunc</code> accepte une seule <code class=\"docutils literal notranslate\">expression</code>, représentant un champ <code class=\"docutils literal notranslate\">DateField</code>, <code class=\"docutils literal notranslate\">TimeField</code> ou <code class=\"docutils literal notranslate\">DateTimeField</code>, une variable <code class=\"docutils literal notranslate\">kind</code> représentant une partie de date ou d’heure et un champ <code class=\"docutils literal notranslate\">output_field</code> qui vaut <code class=\"docutils literal notranslate\">DateTimeField()</code>, <code class=\"docutils literal notranslate\">TimeField()</code> ou <code class=\"docutils literal notranslate\">DateField()</code>. Elle renvoie une date, une heure ou une date/heure en fonction de <code class=\"docutils literal notranslate\">output_field</code>, avec les champs jusqu’à <code class=\"docutils literal notranslate\">kind</code> définis à leur valeur minimale. Si <code class=\"docutils literal notranslate\">output_field</code> est omis, la valeur par défaut sera le type <code class=\"docutils literal notranslate\">output_field</code> de <code class=\"docutils literal notranslate\">expression</code>. Il est possible de passer aussi une sous-classe de <code class=\"docutils literal notranslate\">tzinfo</code>, habituellement fournie par <code class=\"docutils literal notranslate\">pytz</code>, pour tronquer une valeur dans un fuseau horaire spécifique.</p>\n<p>Le paramètre <code class=\"docutils literal notranslate\">is_dst</code> indique si <code class=\"docutils literal notranslate\">pytz</code> doit interpréter les heures non existantes et ambiguës dans les transitions de changements d’heures saisonniers. Par défaut (lorsque <code class=\"docutils literal notranslate\">is_dst=None</code>), <code class=\"docutils literal notranslate\">pytz</code> génère une exception pour de telles heures.</p>\n<aside class=\"version-note version-added\" data-version=\"3.0\" role=\"note\">\n<p class=\"version-note-title\">New in Django 3.0</p><p>Le paramètre <code class=\"docutils literal notranslate\">is_dst</code> a été ajouté.</p>\n</aside>\n<p>Étant donnée la date/heure <code class=\"docutils literal notranslate\">2015-06-15 14:30:50.000321+00:00</code>, les valeurs <code class=\"docutils literal notranslate\">kind</code> possibles renvoient :</p>\n<ul class=\"simple\">\n<li><p>« year »: 2015-01-01 00:00:00+00:00</p></li>\n<li><p>« quarter »: 2015-04-01 00:00:00+00:00</p></li>\n<li><p>« month »: 2015-06-01 00:00:00+00:00</p></li>\n<li><p>« week »: 2015-06-15 00:00:00+00:00</p></li>\n<li><p>« day »: 2015-06-15 00:00:00+00:00</p></li>\n<li><p>« hour »: 2015-06-15 14:00:00+00:00</p></li>\n<li><p>« minute »: 2015-06-15 14:30:00+00:00</p></li>\n<li><p>« second »: 2015-06-15 14:30:50+00:00</p></li>\n</ul>\n<p>Si un fuseau horaire différent comme <code class=\"docutils literal notranslate\">Australia/Melbourne</code> est actif dans Django, la date/heure est convertie dans le nouveau fuseau avant que la valeur soit tronquée. Le décalage horaire de Melbourne dans la date d’exemple ci-dessus est +10:00. Les valeurs renvoyées lorsque ce fuseau est actif seront :</p>\n<ul class=\"simple\">\n<li><p>« year »: 2015-01-01 00:00:00+11:00</p></li>\n<li><p>« quarter »: 2015-04-01 00:00:00+10:00</p></li>\n<li><p>« month »: 2015-06-01 00:00:00+10:00</p></li>\n<li><p>« week »: 2015-06-16 00:00:00+10:00</p></li>\n<li><p>« day »: 2015-06-16 00:00:00+10:00</p></li>\n<li><p>« hour »: 2015-06-16 00:00:00+10:00</p></li>\n<li><p>« minute »: 2015-06-16 00:30:00+10:00</p></li>\n<li><p>« second »: 2015-06-16 00:30:50+10:00</p></li>\n</ul>\n<p>L’année présente un décalage de +11:00 parce que le résultat traverse un passage à l’heure d’été.</p>\n<p>Chaque valeur <code class=\"docutils literal notranslate\">kind</code> ci-dessus possède une sous-classe de <code class=\"docutils literal notranslate\">Trunc</code> correspondante (énumérées ci-dessous) qui devrait être utilisée au lieu de l’équivalent plus bavard, c’est-à-dire <code class=\"docutils literal notranslate\">TruncYear(...)</code> au lieu de <code class=\"docutils literal notranslate\">Trunc(..., kind='year')</code>.</p>\n<p>Les sous-classes sont toutes définies comme des transformations, mais elles ne sont inscrites pour aucun champ, car les noms de requête qui s’imposent sont déjà réservés par les sous-classes de <code class=\"docutils literal notranslate\">Extract</code>.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> datetime\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Count<span class=\"p\">,</span> DateTimeField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Trunc\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>start_datetime<span class=\"o\">=</span>datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">321</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>start_datetime<span class=\"o\">=</span>datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">123</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>start_datetime<span class=\"o\">=</span>datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">,</span> <span class=\"mi\">25</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">27</span><span class=\"p\">,</span> <span class=\"mi\">999</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>experiments_per_day <span class=\"o\">=</span> Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   start_day<span class=\"o\">=</span>Trunc<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;day&#39;</span><span class=\"p\">,</span> output_field<span class=\"o\">=</span>DateTimeField<span class=\"p\">())</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s1\">&#39;start_day&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>annotate<span class=\"p\">(</span>experiments<span class=\"o\">=</span>Count<span class=\"p\">(</span><span class=\"s1\">&#39;id&#39;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> exp <span class=\"ow\">in</span> experiments_per_day<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span>exp<span class=\"p\">[</span><span class=\"s1\">&#39;start_day&#39;</span><span class=\"p\">],</span> exp<span class=\"p\">[</span><span class=\"s1\">&#39;experiments&#39;</span><span class=\"p\">])</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">2015-06-15 00:00:00 2</span>\n<span class=\"go\">2015-12-25 00:00:00 1</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>experiments <span class=\"o\">=</span> Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   start_day<span class=\"o\">=</span>Trunc<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;day&#39;</span><span class=\"p\">,</span> output_field<span class=\"o\">=</span>DateTimeField<span class=\"p\">())</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>filter<span class=\"p\">(</span>start_day<span class=\"o\">=</span>datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> exp <span class=\"ow\">in</span> experiments<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span>exp<span class=\"o\">.</span>start_datetime<span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">2015-06-15 14:30:50.000321</span>\n<span class=\"go\">2015-06-15 14:40:02.000123</span>\n</code></pre></div>\n<section id=\"datefield-truncation\">\n<h4>Troncature de <code class=\"docutils literal notranslate\">DateField</code><a class=\"heading-anchor\" href=\"#datefield-truncation\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.TruncYear\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncYear</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">is_dst<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.TruncYear\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">kind = 'year'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.TruncMonth\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncMonth</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">is_dst<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.TruncMonth\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">kind = 'month'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.TruncWeek\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncWeek</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">is_dst<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.TruncWeek\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Tronque à minuit le lundi de la semaine.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">kind = 'week'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.TruncQuarter\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncQuarter</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">is_dst<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.TruncQuarter\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">kind = 'quarter'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<p>Ce sont des équivalences logiques à <code class=\"docutils literal notranslate\">Trunc('champ_date', kind)</code>. Elles tronquent toutes les parties de la date jusqu’à <code class=\"docutils literal notranslate\">kind</code>, ce qui permet de grouper ou de filtrer des dates avec une plus faible précision. <code class=\"docutils literal notranslate\">expression</code> peut avoir une valeur <code class=\"docutils literal notranslate\">output_field</code> de <code class=\"docutils literal notranslate\">DateField</code> ou de <code class=\"docutils literal notranslate\">DateTimeField</code>.</p>\n<p>Comme les champs <code class=\"docutils literal notranslate\">DateField</code> n’ont pas de composant d’heure, seules les sous-classes de <code class=\"docutils literal notranslate\">Trunc</code> qui s’appliquent aux parties de date peuvent être utilisées avec <code class=\"docutils literal notranslate\">DateField</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=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> datetime\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Count\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> TruncMonth<span class=\"p\">,</span> TruncYear\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"kn\">import</span> timezone\n<span class=\"gp\">&gt;&gt;&gt; </span>start1 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2014</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">321</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>start2 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">123</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>start3 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">,</span> <span class=\"mi\">31</span><span class=\"p\">,</span> <span class=\"mi\">17</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">27</span><span class=\"p\">,</span> <span class=\"mi\">999</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>start_datetime<span class=\"o\">=</span>start1<span class=\"p\">,</span> start_date<span class=\"o\">=</span>start1<span class=\"o\">.</span>date<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>start_datetime<span class=\"o\">=</span>start2<span class=\"p\">,</span> start_date<span class=\"o\">=</span>start2<span class=\"o\">.</span>date<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>start_datetime<span class=\"o\">=</span>start3<span class=\"p\">,</span> start_date<span class=\"o\">=</span>start3<span class=\"o\">.</span>date<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>experiments_per_year <span class=\"o\">=</span> Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   year<span class=\"o\">=</span>TruncYear<span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s1\">&#39;year&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   experiments<span class=\"o\">=</span>Count<span class=\"p\">(</span><span class=\"s1\">&#39;id&#39;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> exp <span class=\"ow\">in</span> experiments_per_year<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span>exp<span class=\"p\">[</span><span class=\"s1\">&#39;year&#39;</span><span class=\"p\">],</span> exp<span class=\"p\">[</span><span class=\"s1\">&#39;experiments&#39;</span><span class=\"p\">])</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">2014-01-01 1</span>\n<span class=\"go\">2015-01-01 2</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span> <span class=\"nn\">pytz</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>melb <span class=\"o\">=</span> pytz<span class=\"o\">.</span>timezone<span class=\"p\">(</span><span class=\"s1\">&#39;Australia/Melbourne&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>experiments_per_month <span class=\"o\">=</span> Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   month<span class=\"o\">=</span>TruncMonth<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>melb<span class=\"p\">))</span><span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s1\">&#39;month&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   experiments<span class=\"o\">=</span>Count<span class=\"p\">(</span><span class=\"s1\">&#39;id&#39;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> exp <span class=\"ow\">in</span> experiments_per_month<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span>exp<span class=\"p\">[</span><span class=\"s1\">&#39;month&#39;</span><span class=\"p\">],</span> exp<span class=\"p\">[</span><span class=\"s1\">&#39;experiments&#39;</span><span class=\"p\">])</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">2015-06-01 00:00:00+10:00 1</span>\n<span class=\"go\">2016-01-01 00:00:00+11:00 1</span>\n<span class=\"go\">2014-06-01 00:00:00+10:00 1</span>\n</code></pre></div>\n</section>\n<section id=\"datetimefield-truncation\">\n<h4>Troncature de <code class=\"docutils literal notranslate\">DateTimeField</code><a class=\"heading-anchor\" href=\"#datetimefield-truncation\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.TruncDate\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncDate</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.TruncDate\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'date'</span></dt>\n<dd></dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">output_field = DateField()</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\">TruncDate</code> force le type de <code class=\"docutils literal notranslate\">expression</code> à une date plutôt que d’utiliser l’instruction SQL de troncature. Elle est aussi inscrite comme transformation pour <code class=\"docutils literal notranslate\">DateTimeField</code> sous la forme <code class=\"docutils literal notranslate\">__date</code>.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.TruncTime\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncTime</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.TruncTime\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'time'</span></dt>\n<dd></dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">output_field = TimeField()</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\">TruncTime</code> force le type de <code class=\"docutils literal notranslate\">expression</code> à une heure plutôt que d’utiliser l’instruction SQL de troncature. Elle est aussi inscrite comme transformation pour <code class=\"docutils literal notranslate\">DateTimeField</code> sous la forme <code class=\"docutils literal notranslate\">__time</code>.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.TruncDay\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncDay</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">is_dst<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.TruncDay\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">kind = 'day'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.TruncHour\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncHour</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">is_dst<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.TruncHour\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">kind = 'hour'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.TruncMinute\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncMinute</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">is_dst<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.TruncMinute\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">kind = 'minute'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.TruncSecond\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncSecond</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">is_dst<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.TruncSecond\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">kind = 'second'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<p>Ce sont des équivalences logiques à <code class=\"docutils literal notranslate\">Trunc('champ_dateheure', kind)</code>. Elles tronquent toutes les parties de la date jusqu’à <code class=\"docutils literal notranslate\">kind</code>, ce qui permet de grouper ou de filtrer des dates/heures avec une plus faible précision. <code class=\"docutils literal notranslate\">expression</code> doit avoir une valeur <code class=\"docutils literal notranslate\">output_field</code> de <code class=\"docutils literal notranslate\">DateTimeField</code>.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> date<span class=\"p\">,</span> datetime\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Count\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> <span class=\"p\">(</span>\n<span class=\"gp\">... </span>    TruncDate<span class=\"p\">,</span> TruncDay<span class=\"p\">,</span> TruncHour<span class=\"p\">,</span> TruncMinute<span class=\"p\">,</span> TruncSecond<span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"kn\">import</span> timezone\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span> <span class=\"nn\">pytz</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>start1 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2014</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">321</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>start_datetime<span class=\"o\">=</span>start1<span class=\"p\">,</span> start_date<span class=\"o\">=</span>start1<span class=\"o\">.</span>date<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>melb <span class=\"o\">=</span> pytz<span class=\"o\">.</span>timezone<span class=\"p\">(</span><span class=\"s1\">&#39;Australia/Melbourne&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    date<span class=\"o\">=</span>TruncDate<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    day<span class=\"o\">=</span>TruncDay<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>melb<span class=\"p\">),</span>\n<span class=\"gp\">... </span>    hour<span class=\"o\">=</span>TruncHour<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>melb<span class=\"p\">),</span>\n<span class=\"gp\">... </span>    minute<span class=\"o\">=</span>TruncMinute<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    second<span class=\"o\">=</span>TruncSecond<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s1\">&#39;date&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;day&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;hour&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;minute&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;second&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"go\">{&#39;date&#39;: datetime.date(2014, 6, 15),</span>\n<span class=\"go\"> &#39;day&#39;: datetime.datetime(2014, 6, 16, 0, 0, tzinfo=&lt;DstTzInfo &#39;Australia/Melbourne&#39; AEST+10:00:00 STD&gt;),</span>\n<span class=\"go\"> &#39;hour&#39;: datetime.datetime(2014, 6, 16, 0, 0, tzinfo=&lt;DstTzInfo &#39;Australia/Melbourne&#39; AEST+10:00:00 STD&gt;),</span>\n<span class=\"go\"> &#39;minute&#39;: &#39;minute&#39;: datetime.datetime(2014, 6, 15, 14, 30, tzinfo=&lt;UTC&gt;),</span>\n<span class=\"go\"> &#39;second&#39;: datetime.datetime(2014, 6, 15, 14, 30, 50, tzinfo=&lt;UTC&gt;)</span>\n<span class=\"go\">}</span>\n</code></pre></div>\n</section>\n<section id=\"timefield-truncation\">\n<h4>Troncature de <code class=\"docutils literal notranslate\">TimeField</code><a class=\"heading-anchor\" href=\"#timefield-truncation\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncHour</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">is_dst<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">kind = 'hour'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncMinute</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">is_dst<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">kind = 'minute'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncSecond</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">is_dst<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">kind = 'second'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<p>Ce sont des équivalences logiques à <code class=\"docutils literal notranslate\">Trunc('champ_heure', kind)</code>. Elles tronquent toutes les parties de l’heure jusqu’à <code class=\"docutils literal notranslate\">kind</code>, ce qui permet de grouper ou de filtrer des heures avec une plus faible précision. <code class=\"docutils literal notranslate\">expression</code> peut avoir une valeur <code class=\"docutils literal notranslate\">output_field</code> de <code class=\"docutils literal notranslate\">TimeField</code> ou de <code class=\"docutils literal notranslate\">DateTimeField</code>.</p>\n<p>Comme les champs <code class=\"docutils literal notranslate\">TimeField</code> n’ont pas de composant de date, seules les sous-classes de <code class=\"docutils literal notranslate\">Trunc</code> qui s’appliquent aux parties d’heure peuvent être utilisées avec <code class=\"docutils literal notranslate\">TimeField</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=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> datetime\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Count<span class=\"p\">,</span> TimeField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> TruncHour\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"kn\">import</span> timezone\n<span class=\"gp\">&gt;&gt;&gt; </span>start1 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2014</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">321</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>start2 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2014</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">123</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>start3 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">,</span> <span class=\"mi\">31</span><span class=\"p\">,</span> <span class=\"mi\">17</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">27</span><span class=\"p\">,</span> <span class=\"mi\">999</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>start_datetime<span class=\"o\">=</span>start1<span class=\"p\">,</span> start_time<span class=\"o\">=</span>start1<span class=\"o\">.</span>time<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>start_datetime<span class=\"o\">=</span>start2<span class=\"p\">,</span> start_time<span class=\"o\">=</span>start2<span class=\"o\">.</span>time<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>start_datetime<span class=\"o\">=</span>start3<span class=\"p\">,</span> start_time<span class=\"o\">=</span>start3<span class=\"o\">.</span>time<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>experiments_per_hour <span class=\"o\">=</span> Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   hour<span class=\"o\">=</span>TruncHour<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> output_field<span class=\"o\">=</span>TimeField<span class=\"p\">()),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s1\">&#39;hour&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>annotate<span class=\"p\">(</span>experiments<span class=\"o\">=</span>Count<span class=\"p\">(</span><span class=\"s1\">&#39;id&#39;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> exp <span class=\"ow\">in</span> experiments_per_hour<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span>exp<span class=\"p\">[</span><span class=\"s1\">&#39;hour&#39;</span><span class=\"p\">],</span> exp<span class=\"p\">[</span><span class=\"s1\">&#39;experiments&#39;</span><span class=\"p\">])</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">14:00:00 2</span>\n<span class=\"go\">17:00:00 1</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span> <span class=\"nn\">pytz</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>melb <span class=\"o\">=</span> pytz<span class=\"o\">.</span>timezone<span class=\"p\">(</span><span class=\"s1\">&#39;Australia/Melbourne&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>experiments_per_hour <span class=\"o\">=</span> Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   hour<span class=\"o\">=</span>TruncHour<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>melb<span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s1\">&#39;hour&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>annotate<span class=\"p\">(</span>experiments<span class=\"o\">=</span>Count<span class=\"p\">(</span><span class=\"s1\">&#39;id&#39;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> exp <span class=\"ow\">in</span> experiments_per_hour<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span>exp<span class=\"p\">[</span><span class=\"s1\">&#39;hour&#39;</span><span class=\"p\">],</span> exp<span class=\"p\">[</span><span class=\"s1\">&#39;experiments&#39;</span><span class=\"p\">])</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">2014-06-16 00:00:00+10:00 2</span>\n<span class=\"go\">2016-01-01 04:00:00+11:00 1</span>\n</code></pre></div>\n</section>\n</section>\n</section>\n<section id=\"math-functions\">\n<span id=\"id2\"></span><h2>Fonctions mathématiques<a class=\"heading-anchor\" href=\"#math-functions\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<aside class=\"version-note version-added\" data-version=\"2.2\" role=\"note\">\n<p class=\"version-note-title\">New in Django 2.2</p></aside>\n<p>Nous allons utiliser le modèle suivant dans les exemples de fonction mathématique qui suivront :</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=\"nc\">Vector</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    x <span class=\"o\">=</span> models<span class=\"o\">.</span>FloatField<span class=\"p\">()</span>\n    y <span class=\"o\">=</span> models<span class=\"o\">.</span>FloatField<span class=\"p\">()</span>\n</code></pre></div>\n<section id=\"abs\">\n<h3><code class=\"docutils literal notranslate\">Abs</code><a class=\"heading-anchor\" href=\"#abs\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Abs\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Abs</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Abs\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie la valeur absolue d’un champ ou d’une expression numérique.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Abs\n<span class=\"gp\">&gt;&gt;&gt; </span>Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>x<span class=\"o\">=-</span><span class=\"mf\">0.5</span><span class=\"p\">,</span> y<span class=\"o\">=</span><span class=\"mf\">1.1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>x_abs<span class=\"o\">=</span>Abs<span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">),</span> y_abs<span class=\"o\">=</span>Abs<span class=\"p\">(</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector<span class=\"o\">.</span>x_abs<span class=\"p\">,</span> vector<span class=\"o\">.</span>y_abs\n<span class=\"go\">(0.5, 1.1)</span>\n</code></pre></div>\n<p>Cette expression peut aussi être inscrite comme transformation. 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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> FloatField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Abs\n<span class=\"gp\">&gt;&gt;&gt; </span>FloatField<span class=\"o\">.</span>register_lookup<span class=\"p\">(</span>Abs<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get vectors inside the unit cube</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vectors <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>x__abs__lt<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> y__abs__lt<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"acos\">\n<h3><code class=\"docutils literal notranslate\">ACos</code><a class=\"heading-anchor\" href=\"#acos\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ACos\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ACos</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ACos\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie l’arccosinus d’un champ ou d’une expression numérique. La valeur de l’expression doit se situer dans l’intervalle -1 à 1.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> ACos\n<span class=\"gp\">&gt;&gt;&gt; </span>Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>x<span class=\"o\">=</span><span class=\"mf\">0.5</span><span class=\"p\">,</span> y<span class=\"o\">=-</span><span class=\"mf\">0.9</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>x_acos<span class=\"o\">=</span>ACos<span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">),</span> y_acos<span class=\"o\">=</span>ACos<span class=\"p\">(</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector<span class=\"o\">.</span>x_acos<span class=\"p\">,</span> vector<span class=\"o\">.</span>y_acos\n<span class=\"go\">(1.0471975511965979, 2.6905658417935308)</span>\n</code></pre></div>\n<p>Cette expression peut aussi être inscrite comme transformation. 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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> FloatField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> ACos\n<span class=\"gp\">&gt;&gt;&gt; </span>FloatField<span class=\"o\">.</span>register_lookup<span class=\"p\">(</span>ACos<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get vectors whose arccosine is less than 1</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vectors <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>x__acos__lt<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> y__acos__lt<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"asin\">\n<h3><code class=\"docutils literal notranslate\">ASin</code><a class=\"heading-anchor\" href=\"#asin\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ASin\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ASin</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ASin\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie l’arcsinus d’un champ ou d’une expression numérique. La valeur de l’expression doit se situer dans l’intervalle -1 à 1.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> ASin\n<span class=\"gp\">&gt;&gt;&gt; </span>Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>x<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> y<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>x_asin<span class=\"o\">=</span>ASin<span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">),</span> y_asin<span class=\"o\">=</span>ASin<span class=\"p\">(</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector<span class=\"o\">.</span>x_asin<span class=\"p\">,</span> vector<span class=\"o\">.</span>y_asin\n<span class=\"go\">(0.0, 1.5707963267948966)</span>\n</code></pre></div>\n<p>Cette expression peut aussi être inscrite comme transformation. 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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> FloatField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> ASin\n<span class=\"gp\">&gt;&gt;&gt; </span>FloatField<span class=\"o\">.</span>register_lookup<span class=\"p\">(</span>ASin<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get vectors whose arcsine is less than 1</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vectors <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>x__asin__lt<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> y__asin__lt<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"atan\">\n<h3><code class=\"docutils literal notranslate\">ATan</code><a class=\"heading-anchor\" href=\"#atan\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ATan\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ATan</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ATan\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie l’arctangente d’un champ ou d’une expression numérique.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> ATan\n<span class=\"gp\">&gt;&gt;&gt; </span>Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>x<span class=\"o\">=</span><span class=\"mf\">3.12</span><span class=\"p\">,</span> y<span class=\"o\">=</span><span class=\"mf\">6.987</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>x_atan<span class=\"o\">=</span>ATan<span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">),</span> y_atan<span class=\"o\">=</span>ATan<span class=\"p\">(</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector<span class=\"o\">.</span>x_atan<span class=\"p\">,</span> vector<span class=\"o\">.</span>y_atan\n<span class=\"go\">(1.2606282660069106, 1.428638798133829)</span>\n</code></pre></div>\n<p>Cette expression peut aussi être inscrite comme transformation. 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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> FloatField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> ATan\n<span class=\"gp\">&gt;&gt;&gt; </span>FloatField<span class=\"o\">.</span>register_lookup<span class=\"p\">(</span>ATan<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get vectors whose arctangent is less than 2</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vectors <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>x__atan__lt<span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> y__atan__lt<span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"atan2\">\n<h3><code class=\"docutils literal notranslate\">ATan2</code><a class=\"heading-anchor\" href=\"#atan2\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ATan2\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ATan2</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression1</em>, <em class=\"sig-param\">expression2</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ATan2\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie l’arctangente de <code class=\"docutils literal notranslate\">expression1 / expression2</code>.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> ATan2\n<span class=\"gp\">&gt;&gt;&gt; </span>Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>x<span class=\"o\">=</span><span class=\"mf\">2.5</span><span class=\"p\">,</span> y<span class=\"o\">=</span><span class=\"mf\">1.9</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>atan2<span class=\"o\">=</span>ATan2<span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;y&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector<span class=\"o\">.</span>atan2\n<span class=\"go\">0.9209258773829491</span>\n</code></pre></div>\n</section>\n<section id=\"ceil\">\n<h3><code class=\"docutils literal notranslate\">Ceil</code><a class=\"heading-anchor\" href=\"#ceil\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Ceil\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Ceil</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Ceil\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie le plus petit nombre entier plus grand ou égal au champ ou à l’expression numérique.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Ceil\n<span class=\"gp\">&gt;&gt;&gt; </span>Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>x<span class=\"o\">=</span><span class=\"mf\">3.12</span><span class=\"p\">,</span> y<span class=\"o\">=</span><span class=\"mf\">7.0</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>x_ceil<span class=\"o\">=</span>Ceil<span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">),</span> y_ceil<span class=\"o\">=</span>Ceil<span class=\"p\">(</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector<span class=\"o\">.</span>x_ceil<span class=\"p\">,</span> vector<span class=\"o\">.</span>y_ceil\n<span class=\"go\">(4.0, 7.0)</span>\n</code></pre></div>\n<p>Cette expression peut aussi être inscrite comme transformation. 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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> FloatField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Ceil\n<span class=\"gp\">&gt;&gt;&gt; </span>FloatField<span class=\"o\">.</span>register_lookup<span class=\"p\">(</span>Ceil<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get vectors whose ceil is less than 10</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vectors <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>x__ceil__lt<span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> y__ceil__lt<span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"cos\">\n<h3><code class=\"docutils literal notranslate\">Cos</code><a class=\"heading-anchor\" href=\"#cos\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Cos\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Cos</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Cos\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie le cosinus d’un champ ou d’une expression numérique.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Cos\n<span class=\"gp\">&gt;&gt;&gt; </span>Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>x<span class=\"o\">=-</span><span class=\"mf\">8.0</span><span class=\"p\">,</span> y<span class=\"o\">=</span><span class=\"mf\">3.1415926</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>x_cos<span class=\"o\">=</span>Cos<span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">),</span> y_cos<span class=\"o\">=</span>Cos<span class=\"p\">(</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector<span class=\"o\">.</span>x_cos<span class=\"p\">,</span> vector<span class=\"o\">.</span>y_cos\n<span class=\"go\">(-0.14550003380861354, -0.9999999999999986)</span>\n</code></pre></div>\n<p>Cette expression peut aussi être inscrite comme transformation. 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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> FloatField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Cos\n<span class=\"gp\">&gt;&gt;&gt; </span>FloatField<span class=\"o\">.</span>register_lookup<span class=\"p\">(</span>Cos<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get vectors whose cosine is less than 0.5</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vectors <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>x__cos__lt<span class=\"o\">=</span><span class=\"mf\">0.5</span><span class=\"p\">,</span> y__cos__lt<span class=\"o\">=</span><span class=\"mf\">0.5</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"cot\">\n<h3><code class=\"docutils literal notranslate\">Cot</code><a class=\"heading-anchor\" href=\"#cot\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Cot\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Cot</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Cot\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie la cotangente d’un champ ou d’une expression numérique.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Cot\n<span class=\"gp\">&gt;&gt;&gt; </span>Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>x<span class=\"o\">=</span><span class=\"mf\">12.0</span><span class=\"p\">,</span> y<span class=\"o\">=</span><span class=\"mf\">1.0</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>x_cot<span class=\"o\">=</span>Cot<span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">),</span> y_cot<span class=\"o\">=</span>Cot<span class=\"p\">(</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector<span class=\"o\">.</span>x_cot<span class=\"p\">,</span> vector<span class=\"o\">.</span>y_cot\n<span class=\"go\">(-1.5726734063976826, 0.642092615934331)</span>\n</code></pre></div>\n<p>Cette expression peut aussi être inscrite comme transformation. 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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> FloatField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Cot\n<span class=\"gp\">&gt;&gt;&gt; </span>FloatField<span class=\"o\">.</span>register_lookup<span class=\"p\">(</span>Cot<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get vectors whose cotangent is less than 1</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vectors <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>x__cot__lt<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> y__cot__lt<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"degrees\">\n<h3><code class=\"docutils literal notranslate\">Degrees</code><a class=\"heading-anchor\" href=\"#degrees\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Degrees\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Degrees</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Degrees\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Convertit un champ ou une expression numérique de radians en degrés.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Degrees\n<span class=\"gp\">&gt;&gt;&gt; </span>Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>x<span class=\"o\">=-</span><span class=\"mf\">1.57</span><span class=\"p\">,</span> y<span class=\"o\">=</span><span class=\"mf\">3.14</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>x_d<span class=\"o\">=</span>Degrees<span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">),</span> y_d<span class=\"o\">=</span>Degrees<span class=\"p\">(</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector<span class=\"o\">.</span>x_d<span class=\"p\">,</span> vector<span class=\"o\">.</span>y_d\n<span class=\"go\">(-89.95437383553924, 179.9087476710785)</span>\n</code></pre></div>\n<p>Cette expression peut aussi être inscrite comme transformation. 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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> FloatField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Degrees\n<span class=\"gp\">&gt;&gt;&gt; </span>FloatField<span class=\"o\">.</span>register_lookup<span class=\"p\">(</span>Degrees<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get vectors whose degrees are less than 360</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vectors <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>x__degrees__lt<span class=\"o\">=</span><span class=\"mi\">360</span><span class=\"p\">,</span> y__degrees__lt<span class=\"o\">=</span><span class=\"mi\">360</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"exp\">\n<h3><code class=\"docutils literal notranslate\">Exp</code><a class=\"heading-anchor\" href=\"#exp\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Exp\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Exp</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Exp\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie la valeur de <code class=\"docutils literal notranslate\">e</code> (la base du logarithme naturel) élevé à la puissance du champ ou de l’expression numérique.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Exp\n<span class=\"gp\">&gt;&gt;&gt; </span>Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>x<span class=\"o\">=</span><span class=\"mf\">5.4</span><span class=\"p\">,</span> y<span class=\"o\">=-</span><span class=\"mf\">2.0</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>x_exp<span class=\"o\">=</span>Exp<span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">),</span> y_exp<span class=\"o\">=</span>Exp<span class=\"p\">(</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector<span class=\"o\">.</span>x_exp<span class=\"p\">,</span> vector<span class=\"o\">.</span>y_exp\n<span class=\"go\">(221.40641620418717, 0.1353352832366127)</span>\n</code></pre></div>\n<p>Cette expression peut aussi être inscrite comme transformation. 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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> FloatField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Exp\n<span class=\"gp\">&gt;&gt;&gt; </span>FloatField<span class=\"o\">.</span>register_lookup<span class=\"p\">(</span>Exp<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get vectors whose exp() is greater than 10</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vectors <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>x__exp__gt<span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> y__exp__gt<span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"floor\">\n<h3><code class=\"docutils literal notranslate\">Floor</code><a class=\"heading-anchor\" href=\"#floor\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Floor\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Floor</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Floor\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie le plus grand nombre entier qui n’est pas plus grand que le champ ou l’expression numérique.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Floor\n<span class=\"gp\">&gt;&gt;&gt; </span>Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>x<span class=\"o\">=</span><span class=\"mf\">5.4</span><span class=\"p\">,</span> y<span class=\"o\">=-</span><span class=\"mf\">2.3</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>x_floor<span class=\"o\">=</span>Floor<span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">),</span> y_floor<span class=\"o\">=</span>Floor<span class=\"p\">(</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector<span class=\"o\">.</span>x_floor<span class=\"p\">,</span> vector<span class=\"o\">.</span>y_floor\n<span class=\"go\">(5.0, -3.0)</span>\n</code></pre></div>\n<p>Cette expression peut aussi être inscrite comme transformation. 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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> FloatField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Floor\n<span class=\"gp\">&gt;&gt;&gt; </span>FloatField<span class=\"o\">.</span>register_lookup<span class=\"p\">(</span>Floor<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get vectors whose floor() is greater than 10</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vectors <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>x__floor__gt<span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> y__floor__gt<span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"ln\">\n<h3><code class=\"docutils literal notranslate\">Ln</code><a class=\"heading-anchor\" href=\"#ln\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Ln\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Ln</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Ln\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie le logarithme naturel d’un champ ou d’une expression numérique.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Ln\n<span class=\"gp\">&gt;&gt;&gt; </span>Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>x<span class=\"o\">=</span><span class=\"mf\">5.4</span><span class=\"p\">,</span> y<span class=\"o\">=</span><span class=\"mf\">233.0</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>x_ln<span class=\"o\">=</span>Ln<span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">),</span> y_ln<span class=\"o\">=</span>Ln<span class=\"p\">(</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector<span class=\"o\">.</span>x_ln<span class=\"p\">,</span> vector<span class=\"o\">.</span>y_ln\n<span class=\"go\">(1.6863989535702288, 5.4510384535657)</span>\n</code></pre></div>\n<p>Cette expression peut aussi être inscrite comme transformation. 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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> FloatField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Ln\n<span class=\"gp\">&gt;&gt;&gt; </span>FloatField<span class=\"o\">.</span>register_lookup<span class=\"p\">(</span>Ln<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get vectors whose value greater than e</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vectors <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>x__ln__gt<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> y__ln__gt<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"log\">\n<h3><code class=\"docutils literal notranslate\">Log</code><a class=\"heading-anchor\" href=\"#log\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Log\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Log</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression1</em>, <em class=\"sig-param\">expression2</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Log\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Accepte deux champs ou expressions numériques et renvoie le logarithme du premier en base du second.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Log\n<span class=\"gp\">&gt;&gt;&gt; </span>Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>x<span class=\"o\">=</span><span class=\"mf\">2.0</span><span class=\"p\">,</span> y<span class=\"o\">=</span><span class=\"mf\">4.0</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>log<span class=\"o\">=</span>Log<span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;y&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector<span class=\"o\">.</span>log\n<span class=\"go\">2.0</span>\n</code></pre></div>\n</section>\n<section id=\"mod\">\n<h3><code class=\"docutils literal notranslate\">Mod</code><a class=\"heading-anchor\" href=\"#mod\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Mod\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Mod</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression1</em>, <em class=\"sig-param\">expression2</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Mod\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Accepte deux champs ou expressions numériques et renvoie le reste du premier divisé par le second (opération modulo).</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Mod\n<span class=\"gp\">&gt;&gt;&gt; </span>Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>x<span class=\"o\">=</span><span class=\"mf\">5.4</span><span class=\"p\">,</span> y<span class=\"o\">=</span><span class=\"mf\">2.3</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>mod<span class=\"o\">=</span>Mod<span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;y&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector<span class=\"o\">.</span>mod\n<span class=\"go\">0.8</span>\n</code></pre></div>\n</section>\n<section id=\"pi\">\n<h3><code class=\"docutils literal notranslate\">Pi</code><a class=\"heading-anchor\" href=\"#pi\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Pi\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Pi</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Pi\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie la valeur de la constante mathématique <code class=\"docutils literal notranslate\">π</code>.</p>\n</section>\n<section id=\"power\">\n<h3><code class=\"docutils literal notranslate\">Power</code><a class=\"heading-anchor\" href=\"#power\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Power\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Power</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression1</em>, <em class=\"sig-param\">expression2</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Power\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Accepte deux champs ou expressions numériques et renvoie la valeur du premier élevé à la puissance du second.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Power\n<span class=\"gp\">&gt;&gt;&gt; </span>Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>x<span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> y<span class=\"o\">=-</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>power<span class=\"o\">=</span>Power<span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;y&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector<span class=\"o\">.</span>power\n<span class=\"go\">0.25</span>\n</code></pre></div>\n</section>\n<section id=\"radians\">\n<h3><code class=\"docutils literal notranslate\">Radians</code><a class=\"heading-anchor\" href=\"#radians\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Radians\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Radians</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Radians\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Convertit un champ ou une expression numérique de degrés en radians.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Radians\n<span class=\"gp\">&gt;&gt;&gt; </span>Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>x<span class=\"o\">=-</span><span class=\"mi\">90</span><span class=\"p\">,</span> y<span class=\"o\">=</span><span class=\"mi\">180</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>x_r<span class=\"o\">=</span>Radians<span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">),</span> y_r<span class=\"o\">=</span>Radians<span class=\"p\">(</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector<span class=\"o\">.</span>x_r<span class=\"p\">,</span> vector<span class=\"o\">.</span>y_r\n<span class=\"go\">(-1.5707963267948966, 3.141592653589793)</span>\n</code></pre></div>\n<p>Cette expression peut aussi être inscrite comme transformation. 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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> FloatField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Radians\n<span class=\"gp\">&gt;&gt;&gt; </span>FloatField<span class=\"o\">.</span>register_lookup<span class=\"p\">(</span>Radians<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get vectors whose radians are less than 1</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vectors <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>x__radians__lt<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> y__radians__lt<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"round\">\n<h3><code class=\"docutils literal notranslate\">Round</code><a class=\"heading-anchor\" href=\"#round\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Round\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Round</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Round\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Arrondit un champ ou une expression numérique à l’entier le plus proche. L’arrondi vers le haut ou vers le bas des valeurs médianes (.5) dépend de la base de données utilisée.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Round\n<span class=\"gp\">&gt;&gt;&gt; </span>Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>x<span class=\"o\">=</span><span class=\"mf\">5.4</span><span class=\"p\">,</span> y<span class=\"o\">=-</span><span class=\"mf\">2.3</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>x_r<span class=\"o\">=</span>Round<span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">),</span> y_r<span class=\"o\">=</span>Round<span class=\"p\">(</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector<span class=\"o\">.</span>x_r<span class=\"p\">,</span> vector<span class=\"o\">.</span>y_r\n<span class=\"go\">(5.0, -2.0)</span>\n</code></pre></div>\n<p>Cette expression peut aussi être inscrite comme transformation. 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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> FloatField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Round\n<span class=\"gp\">&gt;&gt;&gt; </span>FloatField<span class=\"o\">.</span>register_lookup<span class=\"p\">(</span>Round<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get vectors whose round() is less than 20</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vectors <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>x__round__lt<span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span> y__round__lt<span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"sign\">\n<h3><code class=\"docutils literal notranslate\">Sign</code><a class=\"heading-anchor\" href=\"#sign\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Sign\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Sign</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Sign\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<aside class=\"version-note version-added\" data-version=\"3.0\" role=\"note\">\n<p class=\"version-note-title\">New in Django 3.0</p></aside>\n<p>Renvoie le signe (-1, 0, 1) d’un champ ou d’une expression numérique.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Sign\n<span class=\"gp\">&gt;&gt;&gt; </span>Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>x<span class=\"o\">=</span><span class=\"mf\">5.4</span><span class=\"p\">,</span> y<span class=\"o\">=-</span><span class=\"mf\">2.3</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>x_sign<span class=\"o\">=</span>Sign<span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">),</span> y_sign<span class=\"o\">=</span>Sign<span class=\"p\">(</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector<span class=\"o\">.</span>x_sign<span class=\"p\">,</span> vector<span class=\"o\">.</span>y_sign\n<span class=\"go\">(1, -1)</span>\n</code></pre></div>\n<p>Cette expression peut aussi être inscrite comme transformation. 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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> FloatField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Sign\n<span class=\"gp\">&gt;&gt;&gt; </span>FloatField<span class=\"o\">.</span>register_lookup<span class=\"p\">(</span>Sign<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get vectors whose signs of components are less than 0.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vectors <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>x__sign__lt<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> y__sign__lt<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"sin\">\n<h3><code class=\"docutils literal notranslate\">Sin</code><a class=\"heading-anchor\" href=\"#sin\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Sin\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Sin</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Sin\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie le sinus d’un champ ou d’une expression numérique.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Sin\n<span class=\"gp\">&gt;&gt;&gt; </span>Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>x<span class=\"o\">=</span><span class=\"mf\">5.4</span><span class=\"p\">,</span> y<span class=\"o\">=-</span><span class=\"mf\">2.3</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>x_sin<span class=\"o\">=</span>Sin<span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">),</span> y_sin<span class=\"o\">=</span>Sin<span class=\"p\">(</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector<span class=\"o\">.</span>x_sin<span class=\"p\">,</span> vector<span class=\"o\">.</span>y_sin\n<span class=\"go\">(-0.7727644875559871, -0.7457052121767203)</span>\n</code></pre></div>\n<p>Cette expression peut aussi être inscrite comme transformation. 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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> FloatField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Sin\n<span class=\"gp\">&gt;&gt;&gt; </span>FloatField<span class=\"o\">.</span>register_lookup<span class=\"p\">(</span>Sin<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get vectors whose sin() is less than 0</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vectors <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>x__sin__lt<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> y__sin__lt<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"sqrt\">\n<h3><code class=\"docutils literal notranslate\">Sqrt</code><a class=\"heading-anchor\" href=\"#sqrt\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Sqrt\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Sqrt</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Sqrt\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie la racine carrée d’un champ ou d’une expression numérique non négative.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Sqrt\n<span class=\"gp\">&gt;&gt;&gt; </span>Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>x<span class=\"o\">=</span><span class=\"mf\">4.0</span><span class=\"p\">,</span> y<span class=\"o\">=</span><span class=\"mf\">12.0</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>x_sqrt<span class=\"o\">=</span>Sqrt<span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">),</span> y_sqrt<span class=\"o\">=</span>Sqrt<span class=\"p\">(</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector<span class=\"o\">.</span>x_sqrt<span class=\"p\">,</span> vector<span class=\"o\">.</span>y_sqrt\n<span class=\"go\">(2.0, 3.46410)</span>\n</code></pre></div>\n<p>Cette expression peut aussi être inscrite comme transformation. 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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> FloatField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Sqrt\n<span class=\"gp\">&gt;&gt;&gt; </span>FloatField<span class=\"o\">.</span>register_lookup<span class=\"p\">(</span>Sqrt<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get vectors whose sqrt() is less than 5</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vectors <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>x__sqrt__lt<span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">,</span> y__sqrt__lt<span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"tan\">\n<h3><code class=\"docutils literal notranslate\">Tan</code><a class=\"heading-anchor\" href=\"#tan\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Tan\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Tan</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Tan\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie la tangente d’un champ ou d’une expression numérique.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Tan\n<span class=\"gp\">&gt;&gt;&gt; </span>Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>x<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> y<span class=\"o\">=</span><span class=\"mi\">12</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>x_tan<span class=\"o\">=</span>Tan<span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">),</span> y_tan<span class=\"o\">=</span>Tan<span class=\"p\">(</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vector<span class=\"o\">.</span>x_tan<span class=\"p\">,</span> vector<span class=\"o\">.</span>y_tan\n<span class=\"go\">(0.0, -0.6358599286615808)</span>\n</code></pre></div>\n<p>Cette expression peut aussi être inscrite comme transformation. 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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> FloatField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Tan\n<span class=\"gp\">&gt;&gt;&gt; </span>FloatField<span class=\"o\">.</span>register_lookup<span class=\"p\">(</span>Tan<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get vectors whose tangent is less than 0</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>vectors <span class=\"o\">=</span> Vector<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>x__tan__lt<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> y__tan__lt<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"text-functions\">\n<span id=\"id3\"></span><h2>Fonctions textuelles<a class=\"heading-anchor\" href=\"#text-functions\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"chr\">\n<h3><code class=\"docutils literal notranslate\">Chr</code><a class=\"heading-anchor\" href=\"#chr\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Chr\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Chr</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Chr\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Accepte un champ ou une expression numérique et renvoie la représentation textuelle de l’expression sous forme de caractère unique. Il fonctionne comme la fonction <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#chr\" title=\"(disponible dans Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\">chr()</code></a> de Python.</p>\n<p>Comme <a class=\"reference internal\" href=\"#django.db.models.functions.Length\" title=\"django.db.models.functions.Length\"><code class=\"xref py py-class docutils literal notranslate\">Length</code></a>, il peut être inscrit comme transformation pour <code class=\"docutils literal notranslate\">IntegerField</code>. Le nom de requête par défaut est <code class=\"docutils literal notranslate\">chr</code>.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Chr\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>author <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>name__startswith<span class=\"o\">=</span>Chr<span class=\"p\">(</span><span class=\"nb\">ord</span><span class=\"p\">(</span><span class=\"s1\">&#39;M&#39;</span><span class=\"p\">)))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>author<span class=\"o\">.</span>name<span class=\"p\">)</span>\n<span class=\"go\">Margaret Smith</span>\n</code></pre></div>\n</section>\n<section id=\"concat\">\n<h3><code class=\"docutils literal notranslate\">Concat</code><a class=\"heading-anchor\" href=\"#concat\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Concat\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Concat</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Concat\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Accepte une liste d’au moins deux champs textes ou expressions et renvoie la concaténation de ces paramètres. Chaque paramètre doit être de type texte ou caractère. Si vous voulez concaténer un champ <code class=\"docutils literal notranslate\">TextField()</code> avec un champ <code class=\"docutils literal notranslate\">CharField()</code>, prenez alors la précaution d’indiquer à Django que le résultat <code class=\"docutils literal notranslate\">output_field</code> sera un champ <code class=\"docutils literal notranslate\">TextField()</code>. C’est aussi nécessaire lors de la concaténation avec une valeur <code class=\"docutils literal notranslate\">Value</code> comme dans l’exemple ci-dessous.</p>\n<p>Le résultat de cette fonction n’est jamais nul. Pour les moteurs où un paramètre nul aboutit à ce que toute l’expression devienne nulle, Django s’assure que chaque partie nulle est préalablement convertie en chaîne vide.</p>\n<p>Exemple d’utilisation :</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=\"c1\"># Get the display name as &quot;name (goes_by)&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> CharField<span class=\"p\">,</span> Value <span class=\"k\">as</span> V\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Concat\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">,</span> goes_by<span class=\"o\">=</span><span class=\"s1\">&#39;Maggie&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>author <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    screen_name<span class=\"o\">=</span>Concat<span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> V<span class=\"p\">(</span><span class=\"s1\">&#39; (&#39;</span><span class=\"p\">),</span> <span class=\"s1\">&#39;goes_by&#39;</span><span class=\"p\">,</span> V<span class=\"p\">(</span><span class=\"s1\">&#39;)&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>        output_field<span class=\"o\">=</span>CharField<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>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>author<span class=\"o\">.</span>screen_name<span class=\"p\">)</span>\n<span class=\"go\">Margaret Smith (Maggie)</span>\n</code></pre></div>\n</section>\n<section id=\"left\">\n<h3><code class=\"docutils literal notranslate\">Left</code><a class=\"heading-anchor\" href=\"#left\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Left\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Left</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">length</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Left\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie les n (<code class=\"docutils literal notranslate\">length</code>) premiers caractères du champ texte ou de l’expression donnée.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Left\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>author <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>first_initial<span class=\"o\">=</span>Left<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>author<span class=\"o\">.</span>first_initial<span class=\"p\">)</span>\n<span class=\"go\">M</span>\n</code></pre></div>\n</section>\n<section id=\"length\">\n<h3><code class=\"docutils literal notranslate\">Length</code><a class=\"heading-anchor\" href=\"#length\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Length\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Length</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Length\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Accepte un champ texte ou une expression unique et renvoie le nombre de caractères de la valeur. Si l’expression est nulle, la longueur renvoyée sera également nulle.</p>\n<p>Exemple d’utilisation :</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=\"c1\"># Get the length of the name and goes_by fields</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Length\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>author <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   name_length<span class=\"o\">=</span>Length<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>   goes_by_length<span class=\"o\">=</span>Length<span class=\"p\">(</span><span class=\"s1\">&#39;goes_by&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>author<span class=\"o\">.</span>name_length<span class=\"p\">,</span> author<span class=\"o\">.</span>goes_by_length<span class=\"p\">)</span>\n<span class=\"go\">(14, None)</span>\n</code></pre></div>\n<p>Cette expression peut aussi être inscrite comme transformation. 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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> CharField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Length\n<span class=\"gp\">&gt;&gt;&gt; </span>CharField<span class=\"o\">.</span>register_lookup<span class=\"p\">(</span>Length<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get authors whose name is longer than 7 characters</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>authors <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>name__length__gt<span class=\"o\">=</span><span class=\"mi\">7</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"lower\">\n<h3><code class=\"docutils literal notranslate\">Lower</code><a class=\"heading-anchor\" href=\"#lower\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Lower\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Lower</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Lower\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Accepte un champ texte ou une expression unique et renvoie sa représentation en minuscules.</p>\n<p>Cette expression peut aussi être inscrite comme transformation comme expliqué pour <a class=\"reference internal\" href=\"#django.db.models.functions.Length\" title=\"django.db.models.functions.Length\"><code class=\"xref py py-class docutils literal notranslate\">Length</code></a>.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Lower\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>author <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>name_lower<span class=\"o\">=</span>Lower<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>author<span class=\"o\">.</span>name_lower<span class=\"p\">)</span>\n<span class=\"go\">margaret smith</span>\n</code></pre></div>\n</section>\n<section id=\"lpad\">\n<h3><code class=\"docutils literal notranslate\">LPad</code><a class=\"heading-anchor\" href=\"#lpad\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.LPad\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">LPad</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">length</em>, <em class=\"sig-param\">fill_text<span class=\"o\">=</span><span class=\"default_value\">Value(' ')</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.LPad\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie la valeur du champ texte ou de l’expression donnée remplie à sa gauche par <code class=\"docutils literal notranslate\">fill_text</code> afin que la longueur de la valeur résultante possède <code class=\"docutils literal notranslate\">length</code> caractères. La valeur par défaut de <code class=\"docutils literal notranslate\">fill_text</code> est un espace.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Value\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> LPad\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;John&#39;</span><span class=\"p\">,</span> alias<span class=\"o\">=</span><span class=\"s1\">&#39;j&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>update<span class=\"p\">(</span>name<span class=\"o\">=</span>LPad<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"mi\">8</span><span class=\"p\">,</span> Value<span class=\"p\">(</span><span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">)))</span>\n<span class=\"go\">1</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>alias<span class=\"o\">=</span><span class=\"s1\">&#39;j&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>name<span class=\"p\">)</span>\n<span class=\"go\">abcaJohn</span>\n</code></pre></div>\n</section>\n<section id=\"ltrim\">\n<h3><code class=\"docutils literal notranslate\">LTrim</code><a class=\"heading-anchor\" href=\"#ltrim\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.LTrim\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">LTrim</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.LTrim\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Semblable à <a class=\"reference internal\" href=\"#django.db.models.functions.Trim\" title=\"django.db.models.functions.Trim\"><code class=\"xref py py-class docutils literal notranslate\">Trim</code></a>, mais n’enlève que les espaces de début de chaîne.</p>\n</section>\n<section id=\"md5\">\n<h3><code class=\"docutils literal notranslate\">MD5</code><a class=\"heading-anchor\" href=\"#md5\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.MD5\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">MD5</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.MD5\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<aside class=\"version-note version-added\" data-version=\"3.0\" role=\"note\">\n<p class=\"version-note-title\">New in Django 3.0</p></aside>\n<p>Accepte un champ texte ou une expression unique et renvoie l’empreinte MD5 de la chaîne.</p>\n<p>Cette expression peut aussi être inscrite comme transformation comme expliqué pour <a class=\"reference internal\" href=\"#django.db.models.functions.Length\" title=\"django.db.models.functions.Length\"><code class=\"xref py py-class docutils literal notranslate\">Length</code></a>.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> MD5\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>author <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>name_md5<span class=\"o\">=</span>MD5<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>author<span class=\"o\">.</span>name_md5<span class=\"p\">)</span>\n<span class=\"go\">749fb689816b2db85f5b169c2055b247</span>\n</code></pre></div>\n</section>\n<section id=\"ord\">\n<h3><code class=\"docutils literal notranslate\">Ord</code><a class=\"heading-anchor\" href=\"#ord\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Ord\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Ord</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Ord\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Accepte un seul champ texte ou une expression et renvoie la valeur du point de code Unicode du premier caractère de cette expression. Il fonctionne comme la fonction <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#ord\" title=\"(disponible dans Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\">ord()</code></a> de Python, mais aucune exception n’est générée si l’expression comporte plus d’un caractère.</p>\n<p>Cette expression peut aussi être inscrite comme transformation comme expliqué pour <a class=\"reference internal\" href=\"#django.db.models.functions.Length\" title=\"django.db.models.functions.Length\"><code class=\"xref py py-class docutils literal notranslate\">Length</code></a>. Le nom de requête par défaut est <code class=\"docutils literal notranslate\">ord</code>.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Ord\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>author <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>name_code_point<span class=\"o\">=</span>Ord<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>author<span class=\"o\">.</span>name_code_point<span class=\"p\">)</span>\n<span class=\"go\">77</span>\n</code></pre></div>\n</section>\n<section id=\"repeat\">\n<h3><code class=\"docutils literal notranslate\">Repeat</code><a class=\"heading-anchor\" href=\"#repeat\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Repeat\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Repeat</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">number</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Repeat\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie la valeur du champ texte ou de l’expression indiquée répétée <code class=\"docutils literal notranslate\">number</code> fois.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Repeat\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;John&#39;</span><span class=\"p\">,</span> alias<span class=\"o\">=</span><span class=\"s1\">&#39;j&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>update<span class=\"p\">(</span>name<span class=\"o\">=</span>Repeat<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">))</span>\n<span class=\"go\">1</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>alias<span class=\"o\">=</span><span class=\"s1\">&#39;j&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>name<span class=\"p\">)</span>\n<span class=\"go\">JohnJohnJohn</span>\n</code></pre></div>\n</section>\n<section id=\"replace\">\n<h3><code class=\"docutils literal notranslate\">Replace</code><a class=\"heading-anchor\" href=\"#replace\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Replace\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Replace</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">text</em>, <em class=\"sig-param\">replacement<span class=\"o\">=</span><span class=\"default_value\">Value('')</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Replace\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Remplace toutes les occurrences de <code class=\"docutils literal notranslate\">text</code> dans <code class=\"docutils literal notranslate\">expression</code> par <code class=\"docutils literal notranslate\">replacement</code>. Le texte de remplacement par défaut est la chaîne vide. Les paramètres de la fonction sont sensibles à la casse.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Value\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Replace\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Johnson&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>update<span class=\"p\">(</span>name<span class=\"o\">=</span>Replace<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> Value<span class=\"p\">(</span><span class=\"s1\">&#39;Margaret&#39;</span><span class=\"p\">),</span> Value<span class=\"p\">(</span><span class=\"s1\">&#39;Margareth&#39;</span><span class=\"p\">)))</span>\n<span class=\"go\">2</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [{&#39;name&#39;: &#39;Margareth Johnson&#39;}, {&#39;name&#39;: &#39;Margareth Smith&#39;}]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"reverse\">\n<h3><code class=\"docutils literal notranslate\">Reverse</code><a class=\"heading-anchor\" href=\"#reverse\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Reverse\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Reverse</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Reverse\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<aside class=\"version-note version-added\" data-version=\"2.2\" role=\"note\">\n<p class=\"version-note-title\">New in Django 2.2</p></aside>\n<p>Accepte un champ texte ou une expression unique et renvoie les caractères de cette expression en ordre inverse.</p>\n<p>Cette expression peut aussi être inscrite comme transformation comme expliqué pour <a class=\"reference internal\" href=\"#django.db.models.functions.Length\" title=\"django.db.models.functions.Length\"><code class=\"xref py py-class docutils literal notranslate\">Length</code></a>. Le nom de requête par défaut est <code class=\"docutils literal notranslate\">reverse</code>.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Reverse\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>author <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>backward<span class=\"o\">=</span>Reverse<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>author<span class=\"o\">.</span>backward<span class=\"p\">)</span>\n<span class=\"go\">htimS teragraM</span>\n</code></pre></div>\n</section>\n<section id=\"right\">\n<h3><code class=\"docutils literal notranslate\">Right</code><a class=\"heading-anchor\" href=\"#right\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Right\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Right</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">length</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Right\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie les n (<code class=\"docutils literal notranslate\">length</code>) derniers caractères du champ texte ou de l’expression donnée.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Right\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>author <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>last_letter<span class=\"o\">=</span>Right<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>author<span class=\"o\">.</span>last_letter<span class=\"p\">)</span>\n<span class=\"go\">h</span>\n</code></pre></div>\n</section>\n<section id=\"rpad\">\n<h3><code class=\"docutils literal notranslate\">RPad</code><a class=\"heading-anchor\" href=\"#rpad\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.RPad\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RPad</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">length</em>, <em class=\"sig-param\">fill_text<span class=\"o\">=</span><span class=\"default_value\">Value(' ')</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.RPad\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Semblable à <a class=\"reference internal\" href=\"#django.db.models.functions.LPad\" title=\"django.db.models.functions.LPad\"><code class=\"xref py py-class docutils literal notranslate\">LPad</code></a>, mais applique le remplissage en fin de chaîne.</p>\n</section>\n<section id=\"rtrim\">\n<h3><code class=\"docutils literal notranslate\">RTrim</code><a class=\"heading-anchor\" href=\"#rtrim\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.RTrim\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RTrim</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.RTrim\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Semblable à <a class=\"reference internal\" href=\"#django.db.models.functions.Trim\" title=\"django.db.models.functions.Trim\"><code class=\"xref py py-class docutils literal notranslate\">Trim</code></a>, mais n’enlève que les espaces de fin de chaîne.</p>\n</section>\n<section id=\"sha1-sha224-sha256-sha384-and-sha512\">\n<h3><code class=\"docutils literal notranslate\">SHA1</code>, <code class=\"docutils literal notranslate\">SHA224</code>, <code class=\"docutils literal notranslate\">SHA256</code>, <code class=\"docutils literal notranslate\">SHA384</code> et <code class=\"docutils literal notranslate\">SHA512</code><a class=\"heading-anchor\" href=\"#sha1-sha224-sha256-sha384-and-sha512\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.SHA1\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">SHA1</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.SHA1\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.SHA224\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">SHA224</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.SHA224\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.SHA256\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">SHA256</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.SHA256\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.SHA384\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">SHA384</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.SHA384\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.SHA512\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">SHA512</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.SHA512\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<aside class=\"version-note version-added\" data-version=\"3.0\" role=\"note\">\n<p class=\"version-note-title\">New in Django 3.0</p></aside>\n<p>Accepte un champ texte ou une expression unique et renvoie l’empreinte correspondante de la chaîne.</p>\n<p>Elles peuvent aussi être inscrites comme transformations comme expliqué pour <a class=\"reference internal\" href=\"#django.db.models.functions.Length\" title=\"django.db.models.functions.Length\"><code class=\"xref py py-class docutils literal notranslate\">Length</code></a>.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> SHA1\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>author <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>name_sha1<span class=\"o\">=</span>SHA1<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>author<span class=\"o\">.</span>name_sha1<span class=\"p\">)</span>\n<span class=\"go\">b87efd8a6c991c390be5a68e8a7945a7851c7e5c</span>\n</code></pre></div>\n<aside class=\"admonition-postgresql admonition\" role=\"note\">\n<p class=\"admonition-title\">PostgreSQL</p>\n<p>L”<a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/pgcrypto.html\">extension pgcrypto</a> doit être installée. Vous pouvez utiliser l’opération de migration <a class=\"reference internal\" href=\"/fr/3.0/ref/contrib/postgres/operations/#django.contrib.postgres.operations.CryptoExtension\" title=\"django.contrib.postgres.operations.CryptoExtension\"><code class=\"xref py py-class docutils literal notranslate\">CryptoExtension</code></a> pour l’installer.</p>\n</aside>\n<aside class=\"admonition-oracle admonition\" role=\"note\">\n<p class=\"admonition-title\">Oracle</p>\n<p>Oracle ne prend pas en charge la fonction <code class=\"docutils literal notranslate\">SHA224</code>.</p>\n</aside>\n</section>\n<section id=\"strindex\">\n<h3><code class=\"docutils literal notranslate\">StrIndex</code><a class=\"heading-anchor\" href=\"#strindex\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.StrIndex\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">StrIndex</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">string</em>, <em class=\"sig-param\">substring</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.StrIndex\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie un nombre entier positif correspondant à la position indicée (commençant à 1) de la première occurrence de <code class=\"docutils literal notranslate\">substring</code> dans <code class=\"docutils literal notranslate\">string</code>, ou 0 si <code class=\"docutils literal notranslate\">substring</code> est introuvable.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Value <span class=\"k\">as</span> V\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> StrIndex\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Smith, Margaret&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Jackson&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Jackson&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    smith_index<span class=\"o\">=</span>StrIndex<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> V<span class=\"p\">(</span><span class=\"s1\">&#39;Smith&#39;</span><span class=\"p\">))</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>get<span class=\"p\">()</span><span class=\"o\">.</span>smith_index\n<span class=\"go\">0</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>authors <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   smith_index<span class=\"o\">=</span>StrIndex<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> V<span class=\"p\">(</span><span class=\"s1\">&#39;Smith&#39;</span><span class=\"p\">))</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>filter<span class=\"p\">(</span>smith_index__gt<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Author: Margaret Smith&gt;, &lt;Author: Smith, Margaret&gt;]&gt;</span>\n</code></pre></div>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Avertissement</p>\n<p>Avec MySQL, la <a class=\"reference internal\" href=\"/fr/3.0/ref/databases/#mysql-collation\"><span class=\"std std-ref\">collation</span></a> d’une table de base de données détermine si les comparaisons de chaînes (telles que dans <code class=\"docutils literal notranslate\">expression</code> et <code class=\"docutils literal notranslate\">substring</code> de cette fonction) sont sensibles à la casse. Par défaut, les comparaisons ne sont pas sensibles à la casse.</p>\n</aside>\n</section>\n<section id=\"substr\">\n<h3><code class=\"docutils literal notranslate\">Substr</code><a class=\"heading-anchor\" href=\"#substr\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Substr\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Substr</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">pos</em>, <em class=\"sig-param\">length<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Substr\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie une sous-chaîne de longueur <code class=\"docutils literal notranslate\">length</code> extraite du champ ou de l’expression à partir de la position <code class=\"docutils literal notranslate\">pos</code>. L’indice de position commence à 1, il doit donc être plus grand que 0. Si <code class=\"docutils literal notranslate\">length</code> vaut <code class=\"docutils literal notranslate\">None</code>, tout le reste de la chaîne est renvoyé comme résultat.</p>\n<p>Exemple d’utilisation :</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=\"c1\"># Set the alias to the first 5 characters of the name as lowercase</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Lower<span class=\"p\">,</span> Substr\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>update<span class=\"p\">(</span>alias<span class=\"o\">=</span>Lower<span class=\"p\">(</span>Substr<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">)))</span>\n<span class=\"go\">1</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>alias<span class=\"p\">)</span>\n<span class=\"go\">marga</span>\n</code></pre></div>\n</section>\n<section id=\"trim\">\n<h3><code class=\"docutils literal notranslate\">Trim</code><a class=\"heading-anchor\" href=\"#trim\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Trim\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Trim</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Trim\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie la valeur du champ texte ou de l’expression indiquée sans les espaces de début et de fin de chaîne.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Trim\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;  John  &#39;</span><span class=\"p\">,</span> alias<span class=\"o\">=</span><span class=\"s1\">&#39;j&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>update<span class=\"p\">(</span>name<span class=\"o\">=</span>Trim<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">))</span>\n<span class=\"go\">1</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>alias<span class=\"o\">=</span><span class=\"s1\">&#39;j&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>name<span class=\"p\">)</span>\n<span class=\"go\">John</span>\n</code></pre></div>\n</section>\n<section id=\"upper\">\n<h3><code class=\"docutils literal notranslate\">Upper</code><a class=\"heading-anchor\" href=\"#upper\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Upper\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Upper</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Upper\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Accepte un champ texte ou une expression unique et renvoie sa représentation en majuscules.</p>\n<p>Cette expression peut aussi être inscrite comme transformation comme expliqué pour <a class=\"reference internal\" href=\"#django.db.models.functions.Length\" title=\"django.db.models.functions.Length\"><code class=\"xref py py-class docutils literal notranslate\">Length</code></a>.</p>\n<p>Exemple d’utilisation :</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=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Upper\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>author <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>name_upper<span class=\"o\">=</span>Upper<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>author<span class=\"o\">.</span>name_upper<span class=\"p\">)</span>\n<span class=\"go\">MARGARET SMITH</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"window-functions\">\n<span id=\"id4\"></span><h2>Fonctions de fenêtrage<a class=\"heading-anchor\" href=\"#window-functions\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Il existe un certain nombre de fonctions à utiliser dans une expression <a class=\"reference internal\" href=\"/fr/3.0/ref/models/expressions/#django.db.models.expressions.Window\" title=\"django.db.models.expressions.Window\"><code class=\"xref py py-class docutils literal notranslate\">Window</code></a> pour calculer la position des éléments ou le <a class=\"reference internal\" href=\"#django.db.models.functions.Ntile\" title=\"django.db.models.functions.Ntile\"><code class=\"xref py py-class docutils literal notranslate\">Ntile</code></a> de certaines lignes.</p>\n<section id=\"cumedist\">\n<h3><code class=\"docutils literal notranslate\">CumeDist</code><a class=\"heading-anchor\" href=\"#cumedist\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.CumeDist\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">CumeDist</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.CumeDist\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Calcule la distribution cumulative d’une valeur à l’intérieur d’une fenêtre ou d’une partition. La distribution cumulative est définie comme le nombre de lignes précédant ou apparentées à la ligne actuelle divisé par le nombre total de lignes dans l’intervalle.</p>\n</section>\n<section id=\"denserank\">\n<h3><code class=\"docutils literal notranslate\">DenseRank</code><a class=\"heading-anchor\" href=\"#denserank\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.DenseRank\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">DenseRank</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.DenseRank\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Équivalent à <a class=\"reference internal\" href=\"#django.db.models.functions.Rank\" title=\"django.db.models.functions.Rank\"><code class=\"xref py py-class docutils literal notranslate\">Rank</code></a> mais sans « trous ».</p>\n</section>\n<section id=\"firstvalue\">\n<h3><code class=\"docutils literal notranslate\">FirstValue</code><a class=\"heading-anchor\" href=\"#firstvalue\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.FirstValue\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">FirstValue</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.FirstValue\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie la valeur évaluée à la ligne se situant en premier dans l’intervalle de fenêtre, ou <code class=\"docutils literal notranslate\">None</code> si une telle valeur n’existe pas.</p>\n</section>\n<section id=\"lag\">\n<h3><code class=\"docutils literal notranslate\">Lag</code><a class=\"heading-anchor\" href=\"#lag\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Lag\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Lag</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">offset<span class=\"o\">=</span><span class=\"default_value\">1</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Lag\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Calcule le décalage de valeur selon <code class=\"docutils literal notranslate\">offset</code>, et si aucune ligne n’existe à cet endroit, renvoie <code class=\"docutils literal notranslate\">default</code>.</p>\n<p><code class=\"docutils literal notranslate\">default</code> doit avoir le même type que <code class=\"docutils literal notranslate\">expression</code>; cependant, cette validation se fait dans la base de données et pas dans le code Python.</p>\n<aside class=\"admonition-mariadb-and-default admonition\" role=\"note\">\n<p class=\"admonition-title\">MariaDB et <code class=\"docutils literal notranslate\">default</code></p>\n<p>MariaDB <a class=\"reference external\" href=\"https://jira.mariadb.org/browse/MDEV-12981\">ne prend pas en charge</a> le paramètre <code class=\"docutils literal notranslate\">default</code>.</p>\n</aside>\n</section>\n<section id=\"lastvalue\">\n<h3><code class=\"docutils literal notranslate\">LastValue</code><a class=\"heading-anchor\" href=\"#lastvalue\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.LastValue\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">LastValue</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.LastValue\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Comparable à <a class=\"reference internal\" href=\"#django.db.models.functions.FirstValue\" title=\"django.db.models.functions.FirstValue\"><code class=\"xref py py-class docutils literal notranslate\">FirstValue</code></a>, renvoie la dernière valeur dans une clause d’intervalle donnée.</p>\n</section>\n<section id=\"lead\">\n<h3><code class=\"docutils literal notranslate\">Lead</code><a class=\"heading-anchor\" href=\"#lead\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Lead\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Lead</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">offset<span class=\"o\">=</span><span class=\"default_value\">1</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Lead\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Calcule la valeur de tête dans un <a class=\"reference internal\" href=\"/fr/3.0/ref/models/expressions/#window-frames\"><span class=\"std std-ref\">intervalle</span></a> donné. <code class=\"docutils literal notranslate\">offset</code> et <code class=\"docutils literal notranslate\">default</code> sont tous deux évalués en fonction de la ligne actuelle.</p>\n<p><code class=\"docutils literal notranslate\">default</code> doit avoir le même type que <code class=\"docutils literal notranslate\">expression</code>; cependant, cette validation se fait dans la base de données et pas dans le code Python.</p>\n<aside class=\"admonition-mariadb-and-default admonition\" role=\"note\">\n<p class=\"admonition-title\">MariaDB et <code class=\"docutils literal notranslate\">default</code></p>\n<p>MariaDB <a class=\"reference external\" href=\"https://jira.mariadb.org/browse/MDEV-12981\">ne prend pas en charge</a> le paramètre <code class=\"docutils literal notranslate\">default</code>.</p>\n</aside>\n</section>\n<section id=\"nthvalue\">\n<h3><code class=\"docutils literal notranslate\">NthValue</code><a class=\"heading-anchor\" href=\"#nthvalue\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.NthValue\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">NthValue</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">nth<span class=\"o\">=</span><span class=\"default_value\">1</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.NthValue\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Calcule la ligne relative au décalage <code class=\"docutils literal notranslate\">nth</code> (la valeur doit être positive) à l’intérieur de la fenêtre. Renvoie <code class=\"docutils literal notranslate\">None</code> si aucune ligne ne correspond.</p>\n<p>Certaines bases de données gèrent différemment une nième valeur inexistante. Par exemple, Oracle renvoie une chaîne vide au lieu de <code class=\"docutils literal notranslate\">None</code> pour les expressions basées sur des caractères. Django n’applique aucune conversion dans ces cas.</p>\n</section>\n<section id=\"ntile\">\n<h3><code class=\"docutils literal notranslate\">Ntile</code><a class=\"heading-anchor\" href=\"#ntile\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Ntile\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Ntile</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">num_buckets<span class=\"o\">=</span><span class=\"default_value\">1</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Ntile\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Calcule une partition pour chacune des lignes dans la clause d’intervalle, distribuant les nombres aussi également que possible entre 1 et <code class=\"docutils literal notranslate\">num_buckets</code>. Si les lignes ne sont pas divisibles de manière égale par le nombre de « buckets », un ou plusieurs de ceux-ci seront représentés plus fréquemment.</p>\n</section>\n<section id=\"percentrank\">\n<h3><code class=\"docutils literal notranslate\">PercentRank</code><a class=\"heading-anchor\" href=\"#percentrank\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.PercentRank\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">PercentRank</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.PercentRank\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Calcule le rang de centile des lignes dans la clause d’intervalle. Ce calcul est équivalent à l’évaluation de</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=\"p\">(</span>rank <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"p\">(</span>total rows <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Le tableau suivant explique le calcul du rang de centile d’une ligne :</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>N° de ligne</p></th>\n<th class=\"head\"><p>Valeur</p></th>\n<th class=\"head\"><p>Rang</p></th>\n<th class=\"head\"><p>Calcul</p></th>\n<th class=\"head\"><p>Rang en pourcentage</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p>1</p></td>\n<td><p>15</p></td>\n<td><p>1</p></td>\n<td><p>(1-1)/(7-1)</p></td>\n<td><p>0.0000</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>2</p></td>\n<td><p>20</p></td>\n<td><p>2</p></td>\n<td><p>(2-1)/(7-1)</p></td>\n<td><p>0.1666</p></td>\n</tr>\n<tr class=\"row-even\"><td><p>3</p></td>\n<td><p>20</p></td>\n<td><p>2</p></td>\n<td><p>(2-1)/(7-1)</p></td>\n<td><p>0.1666</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>4</p></td>\n<td><p>20</p></td>\n<td><p>2</p></td>\n<td><p>(2-1)/(7-1)</p></td>\n<td><p>0.1666</p></td>\n</tr>\n<tr class=\"row-even\"><td><p>5</p></td>\n<td><p>30</p></td>\n<td><p>5</p></td>\n<td><p>(5-1)/(7-1)</p></td>\n<td><p>0.6666</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>6</p></td>\n<td><p>30</p></td>\n<td><p>5</p></td>\n<td><p>(5-1)/(7-1)</p></td>\n<td><p>0.6666</p></td>\n</tr>\n<tr class=\"row-even\"><td><p>7</p></td>\n<td><p>40</p></td>\n<td><p>7</p></td>\n<td><p>(7-1)/(7-1)</p></td>\n<td><p>1.0000</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</section>\n<section id=\"rank\">\n<h3><code class=\"docutils literal notranslate\">Rank</code><a class=\"heading-anchor\" href=\"#rank\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Rank\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Rank</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Rank\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Comparable à <code class=\"docutils literal notranslate\">RowNumber</code>, cette fonction calcule le rang des lignes de la fenêtre. Le rang calculé comporte des trous. Utilisez <a class=\"reference internal\" href=\"#django.db.models.functions.DenseRank\" title=\"django.db.models.functions.DenseRank\"><code class=\"xref py py-class docutils literal notranslate\">DenseRank</code></a> pour calculer le rang sans trous.</p>\n</section>\n<section id=\"rownumber\">\n<h3><code class=\"docutils literal notranslate\">RowNumber</code><a class=\"heading-anchor\" href=\"#rownumber\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.RowNumber\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RowNumber</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.RowNumber\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Calcule le numéro de ligne selon le tri de la clause d’intervalle ou selon le tri de toute la requête s’il n’y a pas partition dans l”<a class=\"reference internal\" href=\"/fr/3.0/ref/models/expressions/#window-frames\"><span class=\"std std-ref\">intervalle de fenêtre</span></a>.</p>\n</section>\n</section>","rootId":"module-django.db.models.functions","toc":[{"title":"Fonctions de comparaison et de conversion","anchor":"comparison-and-conversion-functions","children":[{"title":"Cast","anchor":"cast","children":[]},{"title":"Coalesce","anchor":"coalesce","children":[]},{"title":"Greatest","anchor":"greatest","children":[]},{"title":"Least","anchor":"least","children":[]},{"title":"NullIf","anchor":"nullif","children":[]}]},{"title":"Fonctions de date","anchor":"date-functions","children":[{"title":"Extract","anchor":"extract","children":[{"title":"Extractions DateField","anchor":"datefield-extracts","children":[]},{"title":"Extractions DateTimeField","anchor":"datetimefield-extracts","children":[]}]},{"title":"Now","anchor":"now","children":[]},{"title":"Trunc","anchor":"trunc","children":[{"title":"Troncature de DateField","anchor":"datefield-truncation","children":[]},{"title":"Troncature de DateTimeField","anchor":"datetimefield-truncation","children":[]},{"title":"Troncature de TimeField","anchor":"timefield-truncation","children":[]}]}]},{"title":"Fonctions mathématiques","anchor":"math-functions","children":[{"title":"Abs","anchor":"abs","children":[]},{"title":"ACos","anchor":"acos","children":[]},{"title":"ASin","anchor":"asin","children":[]},{"title":"ATan","anchor":"atan","children":[]},{"title":"ATan2","anchor":"atan2","children":[]},{"title":"Ceil","anchor":"ceil","children":[]},{"title":"Cos","anchor":"cos","children":[]},{"title":"Cot","anchor":"cot","children":[]},{"title":"Degrees","anchor":"degrees","children":[]},{"title":"Exp","anchor":"exp","children":[]},{"title":"Floor","anchor":"floor","children":[]},{"title":"Ln","anchor":"ln","children":[]},{"title":"Log","anchor":"log","children":[]},{"title":"Mod","anchor":"mod","children":[]},{"title":"Pi","anchor":"pi","children":[]},{"title":"Power","anchor":"power","children":[]},{"title":"Radians","anchor":"radians","children":[]},{"title":"Round","anchor":"round","children":[]},{"title":"Sign","anchor":"sign","children":[]},{"title":"Sin","anchor":"sin","children":[]},{"title":"Sqrt","anchor":"sqrt","children":[]},{"title":"Tan","anchor":"tan","children":[]}]},{"title":"Fonctions textuelles","anchor":"text-functions","children":[{"title":"Chr","anchor":"chr","children":[]},{"title":"Concat","anchor":"concat","children":[]},{"title":"Left","anchor":"left","children":[]},{"title":"Length","anchor":"length","children":[]},{"title":"Lower","anchor":"lower","children":[]},{"title":"LPad","anchor":"lpad","children":[]},{"title":"LTrim","anchor":"ltrim","children":[]},{"title":"MD5","anchor":"md5","children":[]},{"title":"Ord","anchor":"ord","children":[]},{"title":"Repeat","anchor":"repeat","children":[]},{"title":"Replace","anchor":"replace","children":[]},{"title":"Reverse","anchor":"reverse","children":[]},{"title":"Right","anchor":"right","children":[]},{"title":"RPad","anchor":"rpad","children":[]},{"title":"RTrim","anchor":"rtrim","children":[]},{"title":"SHA1, SHA224, SHA256, SHA384 et SHA512","anchor":"sha1-sha224-sha256-sha384-and-sha512","children":[]},{"title":"StrIndex","anchor":"strindex","children":[]},{"title":"Substr","anchor":"substr","children":[]},{"title":"Trim","anchor":"trim","children":[]},{"title":"Upper","anchor":"upper","children":[]}]},{"title":"Fonctions de fenêtrage","anchor":"window-functions","children":[{"title":"CumeDist","anchor":"cumedist","children":[]},{"title":"DenseRank","anchor":"denserank","children":[]},{"title":"FirstValue","anchor":"firstvalue","children":[]},{"title":"Lag","anchor":"lag","children":[]},{"title":"LastValue","anchor":"lastvalue","children":[]},{"title":"Lead","anchor":"lead","children":[]},{"title":"NthValue","anchor":"nthvalue","children":[]},{"title":"Ntile","anchor":"ntile","children":[]},{"title":"PercentRank","anchor":"percentrank","children":[]},{"title":"Rank","anchor":"rank","children":[]},{"title":"RowNumber","anchor":"rownumber","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"Référence de l’API","url":"/fr/3.0/ref/"},{"docname":"ref/models/index","title":"Modèles","url":"/fr/3.0/ref/models/"}],"prev":{"docname":"ref/models/conditional-expressions","title":"Expressions conditionnelles","url":"/fr/3.0/ref/models/conditional-expressions/"},"next":{"docname":"ref/paginator","title":"Pagination","url":"/fr/3.0/ref/paginator/"},"formats":{"html":"/fr/3.0/ref/models/database-functions/","markdown":"/fr/3.0/ref/models/database-functions.md","json":"/fr/3.0/ref/models/database-functions.json"},"source":"https://github.com/django/django/blob/stable/3.0.x/docs/ref/models/database-functions.txt","official":"https://docs.djangoproject.com/fr/3.0/ref/models/database-functions/","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","pt-br","ko","es","el","pl"]}