{"title":"Champs de formulaires","version":"6.1","locale":"fr","docname":"ref/forms/fields","url":"/fr/6.1/ref/forms/fields/","canonical":"https://djangodocs.dev/fr/6.1/ref/forms/fields/","summary":"Lorsque vous créez une classe Form, la partie la plus importante est de définir les champs du formulaire.","html":"<span id=\"form-fields\"></span><h1>Champs de formulaires<a class=\"heading-anchor\" href=\"#module-django.forms.fields\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Field</span><a class=\"heading-anchor\" href=\"#django.forms.Field\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Lorsque vous créez une classe <code class=\"docutils literal notranslate\">Form</code>, la partie la plus importante est de définir les champs du formulaire. Chaque champ possède sa propre logique de validation, ainsi que quelques autres points d’entrée.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.clean\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">clean</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">value</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Field.clean\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Même si l’emploi principal des classes <code class=\"docutils literal notranslate\">Field</code> concerne la définition de classes <code class=\"docutils literal notranslate\">Form</code>, il est aussi possible de les instancier et de les utiliser directement pour obtenir une meilleure idée de leur fonctionnement. Chaque instance <code class=\"docutils literal notranslate\">Field</code> possède une méthode <code class=\"docutils literal notranslate\">clean()</code> acceptant un seul paramètre et qui renvoie une valeur « nettoyée » ou qui génère une exception <code class=\"docutils literal notranslate\">django.core.exceptions.ValidationError</code>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> forms<span class=\"o\">.</span>EmailField<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"s2\">&quot;foo@example.com&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;foo@example.com&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"s2\">&quot;invalid email address&quot;</span><span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">ValidationError</span>: [&#39;Enter a valid email address.&#39;]\n</code></pre></div>\n<section id=\"core-field-arguments\">\n<span id=\"id1\"></span><h2>Paramètres principaux des champs<a class=\"heading-anchor\" href=\"#core-field-arguments\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Chaque constructeur de classe <code class=\"docutils literal notranslate\">Field</code> accepte au moins trois paramètres. Certaines classes acceptent d’autres paramètres spécifiques à la classe, mais ceux qui suivent sont <em>toujours</em> acceptés :</p>\n<section id=\"required\">\n<h3><code class=\"docutils literal notranslate\">required</code><a class=\"heading-anchor\" href=\"#required\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.required\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">required</span><a class=\"heading-anchor\" href=\"#django.forms.Field.required\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Par défaut, chaque classe <code class=\"docutils literal notranslate\">Field</code> suppose qu’une valeur est obligatoire, ce qui fait que si vous ne fournissez pas de valeur (que ce soit <code class=\"docutils literal notranslate\">None</code> ou une chaîne vide(<code class=\"docutils literal notranslate\">&quot;&quot;</code>)), <code class=\"docutils literal notranslate\">clean()</code> génère une exception <code class=\"docutils literal notranslate\">ValidationError</code>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;foo&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">ValidationError</span>: [&#39;This field is required.&#39;]\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">ValidationError</span>: [&#39;This field is required.&#39;]\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;0&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;True&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;False&#39;</span>\n</code></pre></div>\n<p>Pour indiquer qu’un champ n’est <em>pas</em> obligatoire, passez <code class=\"docutils literal notranslate\">required=False</code> au constructeur de <code class=\"docutils literal notranslate\">Field</code>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">(</span>required<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;foo&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;0&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;True&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;False&#39;</span>\n</code></pre></div>\n<p>Lorsque <code class=\"docutils literal notranslate\">required=False</code> est défini pour un champ <code class=\"docutils literal notranslate\">Field</code> et que vous fournissez une valeur vide à <code class=\"docutils literal notranslate\">clean()</code>, la valeur renvoyée est une valeur vide <em>normalisée</em> et aucune exception <code class=\"docutils literal notranslate\">ValidationError</code> n’est générée. Pour <code class=\"docutils literal notranslate\">CharField</code>, la valeur renvoyée correspond à <a class=\"reference internal\" href=\"#django.forms.CharField.empty_value\" title=\"django.forms.CharField.empty_value\"><code class=\"xref py py-attr docutils literal notranslate\">empty_value</code></a> qui est une chaîne vide par défaut. Pour les autres classes <code class=\"docutils literal notranslate\">Field</code>, il peut s’agir de <code class=\"docutils literal notranslate\">None</code> (cela varie en fonction du champ).</p>\n<p>Les composants des champs de formulaire obligatoires possèdent l’attribut HTML <code class=\"docutils literal notranslate\">required</code>. Il est possible de désactiver cela en définissant l’attribut <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/api/#django.forms.Form.use_required_attribute\" title=\"django.forms.Form.use_required_attribute\"><code class=\"xref py py-attr docutils literal notranslate\">Form.use_required_attribute</code></a> à <code class=\"docutils literal notranslate\">False</code>. L’attribut <code class=\"docutils literal notranslate\">required</code> n’est pas ajouté aux formulaires groupés car la validation des navigateurs n’est pas toujours correcte quand on ajoute ou qu’on supprime de tels formulaires.</p>\n</section>\n<section id=\"label\">\n<h3><code class=\"docutils literal notranslate\">label</code><a class=\"heading-anchor\" href=\"#label\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.label\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">label</span><a class=\"heading-anchor\" href=\"#django.forms.Field.label\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Le paramètre <code class=\"docutils literal notranslate\">label</code> permet d’indiquer une étiquette conviviale pour le champ. Cette valeur est utilisée lorsque le champ <code class=\"docutils literal notranslate\">Field</code> est affiché dans un formulaire <code class=\"docutils literal notranslate\">Form</code>.</p>\n<p>Comme expliqué dans <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/api/#ref-forms-api-outputting-html\"><span class=\"std std-ref\">Affichage des formulaires en HTML</span></a>, l’étiquette par défaut d’un champ <code class=\"docutils literal notranslate\">Field</code> est générée à partir du nom de champ en convertissant tous les soulignements en espaces et en mettant en majuscule la première lettre. Indiquez une chaîne dans <code class=\"docutils literal notranslate\">label</code> si ce comportement par défaut ne produit pas un résultat convenable. Utilisez une chaîne vide (<code class=\"docutils literal notranslate\">&quot;&quot;</code>) pour masquer l’étiquette.</p>\n<p>Voici un exemple complet de formulaire implémentant  <code class=\"docutils literal notranslate\">label</code> pour deux de ses champs. Nous avons indiqué <code class=\"docutils literal notranslate\">auto_id=False</code> pour simplifier l’affichage :</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">CommentForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    name <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">(</span>label<span class=\"o\">=</span><span class=\"s2\">&quot;Your name&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    url <span class=\"o\">=</span> forms<span class=\"o\">.</span>URLField<span class=\"p\">(</span>label<span class=\"o\">=</span><span class=\"s2\">&quot;Your website&quot;</span><span class=\"p\">,</span> required<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    comment <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">()</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> CommentForm<span class=\"p\">(</span>auto_id<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>f<span class=\"p\">)</span>\n<span class=\"go\">&lt;div&gt;Your name:&lt;input type=&quot;text&quot; name=&quot;name&quot; required&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;Your website:&lt;input type=&quot;url&quot; name=&quot;url&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;Comment:&lt;input type=&quot;text&quot; name=&quot;comment&quot; required&gt;&lt;/div&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"label-suffix\">\n<h3><code class=\"docutils literal notranslate\">label_suffix</code><a class=\"heading-anchor\" href=\"#label-suffix\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.label_suffix\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">label_suffix</span><a class=\"heading-anchor\" href=\"#django.forms.Field.label_suffix\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Le paramètre <code class=\"docutils literal notranslate\">label_suffix</code> permet de surcharger l’attribut <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/api/#django.forms.Form.label_suffix\" title=\"django.forms.Form.label_suffix\"><code class=\"xref py py-attr docutils literal notranslate\">label_suffix</code></a> d’un formulaire pour un champ particulier :</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">ContactForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    age <span class=\"o\">=</span> forms<span class=\"o\">.</span>IntegerField<span class=\"p\">()</span>\n<span class=\"gp\">... </span>    nationality <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">()</span>\n<span class=\"gp\">... </span>    captcha_answer <span class=\"o\">=</span> forms<span class=\"o\">.</span>IntegerField<span class=\"p\">(</span>label<span class=\"o\">=</span><span class=\"s2\">&quot;2 + 2&quot;</span><span class=\"p\">,</span> label_suffix<span class=\"o\">=</span><span class=\"s2\">&quot; =&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> ContactForm<span class=\"p\">(</span>label_suffix<span class=\"o\">=</span><span class=\"s2\">&quot;?&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>f<span class=\"p\">)</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_age&quot;&gt;Age?&lt;/label&gt;&lt;input type=&quot;number&quot; name=&quot;age&quot; required id=&quot;id_age&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_nationality&quot;&gt;Nationality?&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;nationality&quot; required id=&quot;id_nationality&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_captcha_answer&quot;&gt;2 + 2 =&lt;/label&gt;&lt;input type=&quot;number&quot; name=&quot;captcha_answer&quot; required id=&quot;id_captcha_answer&quot;&gt;&lt;/div&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"initial\">\n<h3><code class=\"docutils literal notranslate\">initial</code><a class=\"heading-anchor\" href=\"#initial\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.initial\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">initial</span><a class=\"heading-anchor\" href=\"#django.forms.Field.initial\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Le paramètre <code class=\"docutils literal notranslate\">initial</code> permet d’indiquer la valeur initiale à utiliser lors de l’affichage HTML du champ dans un formulaire <code class=\"docutils literal notranslate\">Form</code> non lié.</p>\n<p>Pour indiquer des données initiales dynamiques, voir le paramètre <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/api/#django.forms.Form.initial\" title=\"django.forms.Form.initial\"><code class=\"xref py py-attr docutils literal notranslate\">Form.initial</code></a>.</p>\n<p>Le cas d’utilisation typique est lorsque l’on veut afficher un formulaire vierge dans lequel un champ contient initialement une valeur. Par exemple :</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">CommentForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    name <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">(</span>initial<span class=\"o\">=</span><span class=\"s2\">&quot;Your name&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    url <span class=\"o\">=</span> forms<span class=\"o\">.</span>URLField<span class=\"p\">(</span>initial<span class=\"o\">=</span><span class=\"s2\">&quot;https://&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    comment <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">()</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> CommentForm<span class=\"p\">(</span>auto_id<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>f<span class=\"p\">)</span>\n<span class=\"go\">&lt;div&gt;Name:&lt;input type=&quot;text&quot; name=&quot;name&quot; value=&quot;Your name&quot; required&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;Url:&lt;input type=&quot;url&quot; name=&quot;url&quot; value=&quot;https://&quot; required&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;Comment:&lt;input type=&quot;text&quot; name=&quot;comment&quot; required&gt;&lt;/div&gt;</span>\n</code></pre></div>\n<p>Vous vous demandez peut-être pourquoi on ne passe pas simplement un dictionnaire de valeurs initiales dans le paramètre <code class=\"docutils literal notranslate\">data</code> au moment d’afficher le formulaire ? Le problème de cette solution est que cela provoque la validation des données et que le résultat HTML contiendra alors d’éventuelles erreurs de validation :</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">CommentForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    name <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">()</span>\n<span class=\"gp\">... </span>    url <span class=\"o\">=</span> forms<span class=\"o\">.</span>URLField<span class=\"p\">()</span>\n<span class=\"gp\">... </span>    comment <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">()</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>default_data <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Your name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;url&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;https://&quot;</span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> CommentForm<span class=\"p\">(</span>default_data<span class=\"p\">,</span> auto_id<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>f<span class=\"p\">)</span>\n<span class=\"go\">&lt;div&gt;Name:</span>\n<span class=\"go\">  &lt;input type=&quot;text&quot; name=&quot;name&quot; value=&quot;Your name&quot; required&gt;</span>\n<span class=\"go\">&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;Url:</span>\n<span class=\"go\">  &lt;ul class=&quot;errorlist&quot;&gt;&lt;li&gt;Enter a valid URL.&lt;/li&gt;&lt;/ul&gt;</span>\n<span class=\"go\">  &lt;input type=&quot;url&quot; name=&quot;url&quot; value=&quot;https://&quot; required aria-invalid=&quot;true&quot;&gt;</span>\n<span class=\"go\">&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;Comment:</span>\n<span class=\"go\">  &lt;ul class=&quot;errorlist&quot;&gt;&lt;li&gt;This field is required.&lt;/li&gt;&lt;/ul&gt;</span>\n<span class=\"go\">  &lt;input type=&quot;text&quot; name=&quot;comment&quot; required aria-invalid=&quot;true&quot;&gt;</span>\n<span class=\"go\">&lt;/div&gt;</span>\n</code></pre></div>\n<p>C’est pourquoi les valeurs initiales ne sont affichées que pour les formulaires non liés. Pour les formulaires liés, le résultat HTML utilise les données liées.</p>\n<p>Notez également que les valeurs initiales ne sont <em>pas</em> utilisées comme données de repli dans la validation lorsqu’une valeur de champ est manquante. Les valeurs initiales sont <em>uniquement</em> destinées à l’affichage initial d’un formulaire :</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">CommentForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    name <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">(</span>initial<span class=\"o\">=</span><span class=\"s2\">&quot;Your name&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    url <span class=\"o\">=</span> forms<span class=\"o\">.</span>URLField<span class=\"p\">(</span>initial<span class=\"o\">=</span><span class=\"s2\">&quot;https://&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    comment <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">()</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>data <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;url&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;comment&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Foo&quot;</span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> CommentForm<span class=\"p\">(</span>data<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>is_valid<span class=\"p\">()</span>\n<span class=\"go\">False</span>\n<span class=\"go\"># The form does *not* fallback to using the initial values.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>errors\n<span class=\"go\">{&#39;url&#39;: [&#39;This field is required.&#39;], &#39;name&#39;: [&#39;This field is required.&#39;]}</span>\n</code></pre></div>\n<p>Au lieu d’une constante, il est aussi possible de transmettre un objet exécutable :</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span> <span class=\"nn\">datetime</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">DateForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    day <span class=\"o\">=</span> forms<span class=\"o\">.</span>DateField<span class=\"p\">(</span>initial<span class=\"o\">=</span>datetime<span class=\"o\">.</span>date<span class=\"o\">.</span>today<span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>DateForm<span class=\"p\">())</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_day&quot;&gt;Day:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;day&quot; value=&quot;2023-02-11&quot; required id=&quot;id_day&quot;&gt;&lt;/div&gt;</span>\n</code></pre></div>\n<p>L’objet exécutable ne sera évalué qu’au moment où le formulaire non lié est affiché, et non pas au moment de sa définition.</p>\n</section>\n<section id=\"widget\">\n<h3><code class=\"docutils literal notranslate\">widget</code><a class=\"heading-anchor\" href=\"#widget\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.widget\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">widget</span><a class=\"heading-anchor\" href=\"#django.forms.Field.widget\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Le paramètre <code class=\"docutils literal notranslate\">widget</code> permet d’indiquer une classe <code class=\"docutils literal notranslate\">Widget</code> à utiliser lors du rendu HTML de ce champ. Voir <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/\"><span class=\"doc\">Composants de formulaires (« widgets »)</span></a> pour plus d’informations.</p>\n</section>\n<section id=\"help-text\">\n<h3><code class=\"docutils literal notranslate\">help_text</code><a class=\"heading-anchor\" href=\"#help-text\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.help_text\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">help_text</span><a class=\"heading-anchor\" href=\"#django.forms.Field.help_text\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Le paramètre <code class=\"docutils literal notranslate\">help_text</code> vous permet de définir du texte descriptif pour ce champ. S’il est défini, il sera affiché près du champ lorsque celui-ci sera affiché en HTML par l’une des méthodes de raccourci de <code class=\"docutils literal notranslate\">Form</code> (par ex. <code class=\"docutils literal notranslate\">as_ul()</code>).</p>\n<p>Tout comme l’attribut <a class=\"reference internal\" href=\"/fr/6.1/ref/models/fields/#django.db.models.Field.help_text\" title=\"django.db.models.Field.help_text\"><code class=\"xref py py-attr docutils literal notranslate\">help_text</code></a> d’un champ de modèle, cette valeur n’est pas sujette à l’échappement HTML dans les formulaires générés automatiquement.</p>\n<p>Voici un exemple complet de formulaire implémentant  <code class=\"docutils literal notranslate\">help_text</code> pour deux de ses champs. Nous avons indiqué <code class=\"docutils literal notranslate\">auto_id=False</code> pour simplifier l’affichage :</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">HelpTextContactForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    subject <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> help_text<span class=\"o\">=</span><span class=\"s2\">&quot;100 characters max.&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    message <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">()</span>\n<span class=\"gp\">... </span>    contact_email <span class=\"o\">=</span> forms<span class=\"o\">.</span>EmailField<span class=\"p\">(</span>help_text<span class=\"o\">=</span><span class=\"s2\">&quot;Your email (so we can reply).&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> HelpTextContactForm<span class=\"p\">(</span>auto_id<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>f<span class=\"p\">)</span>\n<span class=\"go\">&lt;div&gt;Subject:&lt;div class=&quot;helptext&quot;&gt;100 characters max.&lt;/div&gt;&lt;input type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; required&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;Message:&lt;input type=&quot;text&quot; name=&quot;message&quot; required&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;Contact email:&lt;div class=&quot;helptext&quot;&gt;Your email (so we can reply).&lt;/div&gt;&lt;input type=&quot;email&quot; name=&quot;contact_email&quot; maxlength=&quot;320&quot; required&gt;&lt;/div&gt;</span>\n</code></pre></div>\n<p>Lorsqu’un champ possède un texte d’aide, celui-ci est associé à son composant de saisie par l’attribut HTML <code class=\"docutils literal notranslate\">aria-describedby</code>. Si le composant est produit dans un <code class=\"docutils literal notranslate\">&lt;fieldset&gt;</code>, alors <code class=\"docutils literal notranslate\">aria-describedby</code> est ajouté à cet élément, sinon il est ajouté à l’élément <code class=\"docutils literal notranslate\">&lt;input&gt;</code> du composant.</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">UserForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    username <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">255</span><span class=\"p\">,</span> help_text<span class=\"o\">=</span><span class=\"s2\">&quot;e.g., user@example.com&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> UserForm<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>f<span class=\"p\">)</span>\n<span class=\"go\">&lt;div&gt;</span>\n<span class=\"go\">&lt;label for=&quot;id_username&quot;&gt;Username:&lt;/label&gt;</span>\n<span class=\"go\">&lt;div class=&quot;helptext&quot; id=&quot;id_username_helptext&quot;&gt;e.g., user@example.com&lt;/div&gt;</span>\n<span class=\"go\">&lt;input type=&quot;text&quot; name=&quot;username&quot; maxlength=&quot;255&quot; required aria-describedby=&quot;id_username_helptext&quot; id=&quot;id_username&quot;&gt;</span>\n<span class=\"go\">&lt;/div&gt;</span>\n</code></pre></div>\n<p>Lors de l’ajout d’un attribut <code class=\"docutils literal notranslate\">aria-describedby</code> personnalisé, prenez soin d’inclure également l’identifiant <code class=\"docutils literal notranslate\">id</code> de l’élément <code class=\"docutils literal notranslate\">help_text</code> (si utilisé) dans l’ordre souhaité. Pour les lecteurs d’écran, les descriptions seront lues dans leur ordre d’apparition dans <code class=\"docutils literal notranslate\">aria-describedby</code>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">UserForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    username <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">(</span>\n<span class=\"gp\">... </span>        max_length<span class=\"o\">=</span><span class=\"mi\">255</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        help_text<span class=\"o\">=</span><span class=\"s2\">&quot;e.g., user@example.com&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        widget<span class=\"o\">=</span>forms<span class=\"o\">.</span>TextInput<span class=\"p\">(</span>\n<span class=\"gp\">... </span>            attrs<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;aria-describedby&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;custom-description id_username_helptext&quot;</span><span class=\"p\">},</span>\n<span class=\"gp\">... </span>        <span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> UserForm<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>f<span class=\"p\">[</span><span class=\"s2\">&quot;username&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;input type=&quot;text&quot; name=&quot;username&quot; aria-describedby=&quot;custom-description id_username_helptext&quot; maxlength=&quot;255&quot; id=&quot;id_username&quot; required&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"error-messages\">\n<h3><code class=\"docutils literal notranslate\">error_messages</code><a class=\"heading-anchor\" href=\"#error-messages\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.error_messages\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">error_messages</span><a class=\"heading-anchor\" href=\"#django.forms.Field.error_messages\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Le paramètre <code class=\"docutils literal notranslate\">error_messages</code> permet de redéfinir les messages par défaut que le champ renvoie. Passez un dictionnaire dont les clés correspondent aux messages d’erreur que vous voulez redéfinir. Par exemple, voici le message d’erreur par défaut :</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"gp\">&gt;&gt;&gt; </span>generic <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>generic<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n  <span class=\"c\">...</span>\n<span class=\"gr\">ValidationError</span>: [&#39;This field is required.&#39;]\n</code></pre></div>\n<p>Et voici un message d’erreur personnalisé :</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>name <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">(</span>error_messages<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;required&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Please enter your name&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>name<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n  <span class=\"c\">...</span>\n<span class=\"gr\">ValidationError</span>: [&#39;Please enter your name&#39;]\n</code></pre></div>\n<p>Dans la section <a class=\"reference internal\" href=\"#built-in-field-classes\">Classes de champs Field intégrées</a> ci-dessous, chaque champ <code class=\"docutils literal notranslate\">Field</code> définit les clés de messages d’erreur qu’il utilise.</p>\n</section>\n<section id=\"validators\">\n<h3><code class=\"docutils literal notranslate\">validators</code><a class=\"heading-anchor\" href=\"#validators\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.validators\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">validators</span><a class=\"heading-anchor\" href=\"#django.forms.Field.validators\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Le paramètre <code class=\"docutils literal notranslate\">validators</code> permet de définir une liste de fonctions de validation pour le champ.</p>\n<p>Consultez la <a class=\"reference internal\" href=\"/fr/6.1/ref/validators/\"><span class=\"doc\">documentation des validateurs</span></a> pour plus d’informations.</p>\n</section>\n<section id=\"localize\">\n<h3><code class=\"docutils literal notranslate\">localize</code><a class=\"heading-anchor\" href=\"#localize\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.localize\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">localize</span><a class=\"heading-anchor\" href=\"#django.forms.Field.localize\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Le paramètre <code class=\"docutils literal notranslate\">localize</code> active la régionalisation des données de formulaires, aussi bien au niveau de la saisie que de l’affichage produit.</p>\n<p>Consultez la documentation sur la <a class=\"reference internal\" href=\"/fr/6.1/topics/i18n/formatting/\"><span class=\"doc\">régionalisation de la mise en forme</span></a> pour plus d’informations.</p>\n</section>\n<section id=\"disabled\">\n<h3><code class=\"docutils literal notranslate\">disabled</code><a class=\"heading-anchor\" href=\"#disabled\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.disabled\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">disabled</span><a class=\"heading-anchor\" href=\"#django.forms.Field.disabled\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Le paramètre booléen <code class=\"docutils literal notranslate\">disabled</code>, lorsqu’il est défini à <code class=\"docutils literal notranslate\">True</code>, désactive un champ de formulaire en utilisant l’attribut HTML <code class=\"docutils literal notranslate\">disabled</code> afin qu’il ne soit pas modifiable par les utilisateurs. Même si quelqu’un forçait la modification de la valeur du champ soumis au serveur, elle serait ignorée en faveur de la valeur fournie initialement au formulaire.</p>\n</section>\n<section id=\"template-name\">\n<h3><code class=\"docutils literal notranslate\">template_name</code><a class=\"heading-anchor\" href=\"#template-name\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.template_name\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">template_name</span><a class=\"heading-anchor\" href=\"#django.forms.Field.template_name\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>L’argument <code class=\"docutils literal notranslate\">template_name</code> permet d’utiliser un gabarit personnalisé lorsque le champ est produit avec <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/api/#django.forms.BoundField.as_field_group\" title=\"django.forms.BoundField.as_field_group\"><code class=\"xref py py-meth docutils literal notranslate\">as_field_group()</code></a>. Par défaut, cette valeur est <code class=\"docutils literal notranslate\">&quot;django/forms/field.html&quot;</code>. Elle peut être adaptée pour chaque champ en surchargeant cet attribut ou plus généralement en surchargeant le gabarit par défaut, voir aussi <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/renderers/#overriding-built-in-field-templates\"><span class=\"std std-ref\">Redéfinition des gabarits de champs intégrés</span></a>.</p>\n</section>\n<section id=\"bound-field-class\">\n<h3><code class=\"docutils literal notranslate\">bound_field_class</code><a class=\"heading-anchor\" href=\"#bound-field-class\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.bound_field_class\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">bound_field_class</span><a class=\"heading-anchor\" href=\"#django.forms.Field.bound_field_class\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>L’attribut <code class=\"docutils literal notranslate\">bound_field_class</code> permet une surcharge par champ de <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/api/#django.forms.Form.bound_field_class\" title=\"django.forms.Form.bound_field_class\"><code class=\"xref py py-attr docutils literal notranslate\">Form.bound_field_class</code></a>.</p>\n</section>\n</section>\n<section id=\"checking-if-the-field-data-has-changed\">\n<h2>Contrôle des données de champ modifiées<a class=\"heading-anchor\" href=\"#checking-if-the-field-data-has-changed\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"has-changed\">\n<h3><code class=\"docutils literal notranslate\">has_changed()</code><a class=\"heading-anchor\" href=\"#has-changed\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.has_changed\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">has_changed</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Field.has_changed\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>La méthode <code class=\"docutils literal notranslate\">has_changed()</code> est utilisée pour déterminer si la valeur du champ a été modifiée par rapport à sa valeur initiale. Renvoie <code class=\"docutils literal notranslate\">True</code> ou <code class=\"docutils literal notranslate\">False</code>.</p>\n<p>Consultez la documentation de <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/api/#django.forms.Form.has_changed\" title=\"django.forms.Form.has_changed\"><code class=\"xref py py-class docutils literal notranslate\">Form.has_changed</code></a> pour plus de détails.</p>\n</section>\n</section>\n<section id=\"built-in-field-classes\">\n<span id=\"built-in-fields\"></span><h2>Classes de champs <code class=\"docutils literal notranslate\">Field</code> intégrées<a class=\"heading-anchor\" href=\"#built-in-field-classes\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Bien évidemment, la bibliothèque des formulaires est livrée avec une série de classes <code class=\"docutils literal notranslate\">Field</code> représentant les besoins de validation les plus courants. Cette section décrit chaque champ intégré dans Django.</p>\n<p>Pour chaque champ, nous indiquons le composant utilisé par défaut quand <code class=\"docutils literal notranslate\">widget</code> n’est pas précisé. Nous indiquons également la valeur renvoyée lorsqu’une valeur vide est fournie (voir la section sur <code class=\"docutils literal notranslate\">required</code> ci-dessus pour comprendre ce que cela signifie).</p>\n<section id=\"booleanfield\">\n<h3><code class=\"docutils literal notranslate\">BooleanField</code><a class=\"heading-anchor\" href=\"#booleanfield\"><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.forms.BooleanField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">BooleanField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.BooleanField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.CheckboxInput\" title=\"django.forms.CheckboxInput\"><code class=\"xref py py-class docutils literal notranslate\">CheckboxInput</code></a></p></li>\n<li><p>Valeur vide : <code class=\"docutils literal notranslate\">False</code></p></li>\n<li><p>Est normalisé en : une valeur Python <code class=\"docutils literal notranslate\">True</code> ou <code class=\"docutils literal notranslate\">False</code>.</p></li>\n<li><p>Valide que la valeur est <code class=\"docutils literal notranslate\">True</code> (signifiant par exemple que la case à cocher est cochée) si <code class=\"docutils literal notranslate\">required=True</code> pour ce champ.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code></p></li>\n</ul>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Comme toutes les sous-classes de <code class=\"docutils literal notranslate\">Field</code> héritent <code class=\"docutils literal notranslate\">required=True</code> par défaut, la condition de validation est importante à cet endroit. Si vous souhaitez inclure une valeur booléenne dans un formulaire qui puisse valoir aussi bien <code class=\"docutils literal notranslate\">True</code> que <code class=\"docutils literal notranslate\">False</code> (par exemple une case cochée ou non), vous devez vous rappeler de passer <code class=\"docutils literal notranslate\">required=False</code> au moment de créer le champ <code class=\"docutils literal notranslate\">BooleanField</code>.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"charfield\">\n<h3><code class=\"docutils literal notranslate\">CharField</code><a class=\"heading-anchor\" href=\"#charfield\"><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.forms.CharField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">CharField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.CharField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a></p></li>\n<li><p>Valeur vide : ce qui a été indiqué dans <a class=\"reference internal\" href=\"#django.forms.CharField.empty_value\" title=\"django.forms.CharField.empty_value\"><code class=\"xref py py-attr docutils literal notranslate\">empty_value</code></a>.</p></li>\n<li><p>Est normalisé en : une chaîne.</p></li>\n<li><p>Utilise <a class=\"reference internal\" href=\"/fr/6.1/ref/validators/#django.core.validators.MaxLengthValidator\" title=\"django.core.validators.MaxLengthValidator\"><code class=\"xref py py-class docutils literal notranslate\">MaxLengthValidator</code></a> et <a class=\"reference internal\" href=\"/fr/6.1/ref/validators/#django.core.validators.MinLengthValidator\" title=\"django.core.validators.MinLengthValidator\"><code class=\"xref py py-class docutils literal notranslate\">MinLengthValidator</code></a> si <code class=\"docutils literal notranslate\">max_length</code> et <code class=\"docutils literal notranslate\">min_length</code> sont fournis. Sinon, toutes les entrées sont valides.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">max_length</code>, <code class=\"docutils literal notranslate\">min_length</code></p></li>\n</ul>\n<p>Possède les paramètres facultatifs suivants liés à la validation :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.CharField.max_length\">\n<span class=\"sig-name descname\">max_length</span><a class=\"heading-anchor\" href=\"#django.forms.CharField.max_length\"><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 attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.CharField.min_length\">\n<span class=\"sig-name descname\">min_length</span><a class=\"heading-anchor\" href=\"#django.forms.CharField.min_length\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Quand ils sont fournis, ces paramètres garantissent que la chaîne de caractères correspond au maximum ou au minimum à la longueur donnée.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.CharField.strip\">\n<span class=\"sig-name descname\">strip</span><a class=\"heading-anchor\" href=\"#django.forms.CharField.strip\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Si <code class=\"docutils literal notranslate\">True</code> (valeur par défaut), la valeur sera épurée d’éventuelles espaces initiales ou finales.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.CharField.empty_value\">\n<span class=\"sig-name descname\">empty_value</span><a class=\"heading-anchor\" href=\"#django.forms.CharField.empty_value\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>La valeur à utiliser pour représenter une valeur vide. Contient une chaîne vide par défaut.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"choicefield\">\n<h3><code class=\"docutils literal notranslate\">ChoiceField</code><a class=\"heading-anchor\" href=\"#choicefield\"><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.forms.ChoiceField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ChoiceField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.ChoiceField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.Select\" title=\"django.forms.Select\"><code class=\"xref py py-class docutils literal notranslate\">Select</code></a></p></li>\n<li><p>Valeur vide : <code class=\"docutils literal notranslate\">''</code> (une chaîne vide)</p></li>\n<li><p>Est normalisé en : une chaîne.</p></li>\n<li><p>Valide que la valeur donnée existe dans la liste à choix.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid_choice</code></p></li>\n</ul>\n<p>Le message d’erreur <code class=\"docutils literal notranslate\">invalid_choice</code> peut contenir <code class=\"docutils literal notranslate\">%(value)s</code>, qui sera remplacé par le choix sélectionné.</p>\n<p>Accepte un paramètre supplémentaire :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ChoiceField.choices\">\n<span class=\"sig-name descname\">choices</span><a class=\"heading-anchor\" href=\"#django.forms.ChoiceField.choices\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Soit un object <a class=\"reference external\" href=\"https://docs.python.org/3/glossary.html#term-iterable\" title=\"(disponible dans Python v3.14)\"><span class=\"xref std std-term\">itérable</span></a> de tuples à 2 valeurs à utiliser comme liste de choix pour ce champ, soit un <a class=\"reference internal\" href=\"/fr/6.1/ref/models/fields/#field-choices-enum-types\"><span class=\"std std-ref\">type énumération</span></a>, soit un objet exécutable qui renvoie un tel objet itérable. Ce paramètre accepte les mêmes formats que le paramètre <code class=\"docutils literal notranslate\">choices</code> d’un champ de modèle. Consultez la <a class=\"reference internal\" href=\"/fr/6.1/ref/models/fields/#field-choices\"><span class=\"std std-ref\">documentation des champs de modèles sur les choix</span></a> pour plus de détails. Si le paramètre est un exécutable, il est évalué lors de chaque initialisation du formulaire contenant le champ, en plus de l’évaluation au moment du rendu. Par défaut, c’est une liste vide.</p>\n</dd></dl>\n\n<aside class=\"admonition-choice-type admonition\" role=\"note\">\n<p class=\"admonition-title\">Type de choix</p>\n<p>Ce champ normalise les choix à des chaînes. Donc si des choix devraient avoir des valeurs d’autres types de données, comme des entiers ou des booléens, considérez plutôt l’utilisation de champs <a class=\"reference internal\" href=\"#django.forms.TypedChoiceField\" title=\"django.forms.TypedChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">TypedChoiceField</code></a>.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"datefield\">\n<h3><code class=\"docutils literal notranslate\">DateField</code><a class=\"heading-anchor\" href=\"#datefield\"><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.forms.DateField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">DateField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.DateField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.DateInput\" title=\"django.forms.DateInput\"><code class=\"xref py py-class docutils literal notranslate\">DateInput</code></a></p></li>\n<li><p>Valeur vide : <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Est normalisé en : un objet Python <code class=\"docutils literal notranslate\">datetime.date</code>.</p></li>\n<li><p>Valide que la valeur donnée est un objet <code class=\"docutils literal notranslate\">datetime.date</code>, <code class=\"docutils literal notranslate\">datetime.datetime</code> ou une chaîne mise en forme dans un format de date particulier.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code></p></li>\n</ul>\n<p>Accepte un paramètre facultatif :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.DateField.input_formats\">\n<span class=\"sig-name descname\">input_formats</span><a class=\"heading-anchor\" href=\"#django.forms.DateField.input_formats\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Un objet itérable de chaînes de format utilisées pour essayer de convertir une chaîne en un objet <code class=\"docutils literal notranslate\">datetime.date</code> valide.</p>\n</dd></dl>\n\n<p>Si aucun paramètre <code class=\"docutils literal notranslate\">input_formats</code> n’est indiqué, les formats d’entrée par défaut sont lus dans la clé <code class=\"docutils literal notranslate\">DATE_INPUT_FORMATS</code> du format de langue actif, ou dans le réglage <a class=\"reference internal\" href=\"/fr/6.1/ref/settings/#std-setting-DATE_INPUT_FORMATS\"><code class=\"xref std std-setting docutils literal notranslate\">DATE_INPUT_FORMATS</code></a> si la régionalisation est désactivée. Voir aussi la <a class=\"reference internal\" href=\"/fr/6.1/topics/i18n/formatting/\"><span class=\"doc\">régionalisation des formats</span></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"datetimefield\">\n<h3><code class=\"docutils literal notranslate\">DateTimeField</code><a class=\"heading-anchor\" href=\"#datetimefield\"><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.forms.DateTimeField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">DateTimeField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.DateTimeField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.DateTimeInput\" title=\"django.forms.DateTimeInput\"><code class=\"xref py py-class docutils literal notranslate\">DateTimeInput</code></a></p></li>\n<li><p>Valeur vide : <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Est normalisé en : un objet Python <code class=\"docutils literal notranslate\">datetime.datetime</code>.</p></li>\n<li><p>Valide que la valeur donnée est un objet <code class=\"docutils literal notranslate\">datetime.datetime</code>, <code class=\"docutils literal notranslate\">datetime.date</code> ou une chaîne mise en forme dans un format de date/heure particulier.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code></p></li>\n</ul>\n<p>Accepte un paramètre facultatif :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.DateTimeField.input_formats\">\n<span class=\"sig-name descname\">input_formats</span><a class=\"heading-anchor\" href=\"#django.forms.DateTimeField.input_formats\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Un objet itérable de chaînes de format utilisées pour essayer de convertir une chaîne en un objet <code class=\"docutils literal notranslate\">datetime.datetime</code> valide, en plus des formats ISO 8601.</p>\n</dd></dl>\n\n<p>Le champ accepte toujours les chaînes mises en forme selon le format ISO 8601 ou apparenté reconnues par <a class=\"reference internal\" href=\"/fr/6.1/ref/utils/#django.utils.dateparse.parse_datetime\" title=\"django.utils.dateparse.parse_datetime\"><code class=\"xref py py-func docutils literal notranslate\">parse_datetime()</code></a>. Voici quelques exemples :</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">'2006-10-25 14:30:59'</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">'2006-10-25T14:30:59'</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">'2006-10-25 14:30'</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">'2006-10-25T14:30'</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">'2006-10-25T14:30Z'</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">'2006-10-25T14:30+02:00'</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">'2006-10-25'</code></p></li>\n</ul>\n<p>Si aucun paramètre <code class=\"docutils literal notranslate\">input_formats</code> n’est indiqué, les formats d’entrée par défaut sont lus dans les clés <code class=\"docutils literal notranslate\">DATETIME_INPUT_FORMATS</code> et <code class=\"docutils literal notranslate\">DATE_INPUT_FORMATS</code> du format de langue actif, ou dans les réglages <a class=\"reference internal\" href=\"/fr/6.1/ref/settings/#std-setting-DATETIME_INPUT_FORMATS\"><code class=\"xref std std-setting docutils literal notranslate\">DATETIME_INPUT_FORMATS</code></a> et <a class=\"reference internal\" href=\"/fr/6.1/ref/settings/#std-setting-DATE_INPUT_FORMATS\"><code class=\"xref std std-setting docutils literal notranslate\">DATE_INPUT_FORMATS</code></a> si la régionalisation est désactivée. Voir aussi la <a class=\"reference internal\" href=\"/fr/6.1/topics/i18n/formatting/\"><span class=\"doc\">régionalisation des formats</span></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"decimalfield\">\n<h3><code class=\"docutils literal notranslate\">DecimalField</code><a class=\"heading-anchor\" href=\"#decimalfield\"><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.forms.DecimalField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">DecimalField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.DecimalField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.NumberInput\" title=\"django.forms.NumberInput\"><code class=\"xref py py-class docutils literal notranslate\">NumberInput</code></a> lorsque <a class=\"reference internal\" href=\"#django.forms.Field.localize\" title=\"django.forms.Field.localize\"><code class=\"xref py py-attr docutils literal notranslate\">Field.localize</code></a> vaut <code class=\"docutils literal notranslate\">False</code>, sinon <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a>.</p></li>\n<li><p>Valeur vide : <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Est normalisé en : un objet Python <code class=\"docutils literal notranslate\">decimal</code>.</p></li>\n<li><p>Valide que la valeur donnée est un nombre décimal. Utilise <a class=\"reference internal\" href=\"/fr/6.1/ref/validators/#django.core.validators.MaxValueValidator\" title=\"django.core.validators.MaxValueValidator\"><code class=\"xref py py-class docutils literal notranslate\">MaxValueValidator</code></a> et <a class=\"reference internal\" href=\"/fr/6.1/ref/validators/#django.core.validators.MinValueValidator\" title=\"django.core.validators.MinValueValidator\"><code class=\"xref py py-class docutils literal notranslate\">MinValueValidator</code></a> si <code class=\"docutils literal notranslate\">max_value</code> et <code class=\"docutils literal notranslate\">min_value</code> sont fournis. Utilise <a class=\"reference internal\" href=\"/fr/6.1/ref/validators/#django.core.validators.StepValueValidator\" title=\"django.core.validators.StepValueValidator\"><code class=\"xref py py-class docutils literal notranslate\">StepValueValidator</code></a> si <code class=\"docutils literal notranslate\">step_size</code> est fourni. Les espaces de début et de fin sont ignorés.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code>, <code class=\"docutils literal notranslate\">max_value</code>, <code class=\"docutils literal notranslate\">min_value</code>, <code class=\"docutils literal notranslate\">max_digits</code>, <code class=\"docutils literal notranslate\">max_decimal_places</code>, <code class=\"docutils literal notranslate\">max_whole_digits</code>, <code class=\"docutils literal notranslate\">step_size</code>.</p></li>\n</ul>\n<p>Les messages d’erreur <code class=\"docutils literal notranslate\">max_value</code> et <code class=\"docutils literal notranslate\">min_value</code> peuvent contenir <code class=\"docutils literal notranslate\">%(limit_value)s</code>, qui sera remplacé par la limite concernée. Sur le même principe, les messages d’erreur <code class=\"docutils literal notranslate\">max_digits</code>, <code class=\"docutils literal notranslate\">max_decimal_places</code> et <code class=\"docutils literal notranslate\">max_whole_digits</code> peuvent contenir <code class=\"docutils literal notranslate\">%(max)s</code>.</p>\n<p>Accepte cinq paramètres facultatifs :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.DecimalField.max_value\">\n<span class=\"sig-name descname\">max_value</span><a class=\"heading-anchor\" href=\"#django.forms.DecimalField.max_value\"><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 attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.DecimalField.min_value\">\n<span class=\"sig-name descname\">min_value</span><a class=\"heading-anchor\" href=\"#django.forms.DecimalField.min_value\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ces paramètres contrôlent les intervalles de valeurs autorisées dans le champ et doivent être exprimés en valeurs <code class=\"docutils literal notranslate\">decimal.Decimal</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.DecimalField.max_digits\">\n<span class=\"sig-name descname\">max_digits</span><a class=\"heading-anchor\" href=\"#django.forms.DecimalField.max_digits\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Le nombre maximum de chiffres autorisés dans la valeur (avant et après le point décimal, sans tenir compte des zéros initiaux).</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.DecimalField.decimal_places\">\n<span class=\"sig-name descname\">decimal_places</span><a class=\"heading-anchor\" href=\"#django.forms.DecimalField.decimal_places\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Le nombre maximal de décimales autorisées.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.DecimalField.step_size\">\n<span class=\"sig-name descname\">step_size</span><a class=\"heading-anchor\" href=\"#django.forms.DecimalField.step_size\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Limite la validité des entrées à un multiple entier de <code class=\"docutils literal notranslate\">step_size</code>. Si <code class=\"docutils literal notranslate\">min_value</code> est aussi indiquée, elle est ajoutée comme valeur de décalage pour déterminer si la taille de pas correspond.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"durationfield\">\n<h3><code class=\"docutils literal notranslate\">DurationField</code><a class=\"heading-anchor\" href=\"#durationfield\"><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.forms.DurationField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">DurationField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.DurationField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a></p></li>\n<li><p>Valeur vide : <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Est normalisé en : un objet Python <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.timedelta\" title=\"(disponible dans Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">timedelta</code></a>.</p></li>\n<li><p>Valide que la valeur donnée est une chaîne qui peut être convertie en une différence de temps <code class=\"docutils literal notranslate\">timedelta</code>. La valeur doit être comprise entre <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.timedelta.min\" title=\"(disponible dans Python v3.14)\"><code class=\"xref py py-attr docutils literal notranslate\">datetime.timedelta.min</code></a> et <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.timedelta.max\" title=\"(disponible dans Python v3.14)\"><code class=\"xref py py-attr docutils literal notranslate\">datetime.timedelta.max</code></a>.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code>, <code class=\"docutils literal notranslate\">overflow</code>.</p></li>\n</ul>\n<p>Accepte tout format que <a class=\"reference internal\" href=\"/fr/6.1/ref/utils/#django.utils.dateparse.parse_duration\" title=\"django.utils.dateparse.parse_duration\"><code class=\"xref py py-func docutils literal notranslate\">parse_duration()</code></a> peut analyser.</p>\n</dd></dl>\n\n</section>\n<section id=\"emailfield\">\n<h3><code class=\"docutils literal notranslate\">EmailField</code><a class=\"heading-anchor\" href=\"#emailfield\"><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.forms.EmailField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">EmailField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.EmailField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.EmailInput\" title=\"django.forms.EmailInput\"><code class=\"xref py py-class docutils literal notranslate\">EmailInput</code></a></p></li>\n<li><p>Valeur vide : ce qui a été indiqué dans <code class=\"docutils literal notranslate\">empty_value</code>.</p></li>\n<li><p>Est normalisé en : une chaîne.</p></li>\n<li><p>Utilise <a class=\"reference internal\" href=\"/fr/6.1/ref/validators/#django.core.validators.EmailValidator\" title=\"django.core.validators.EmailValidator\"><code class=\"xref py py-class docutils literal notranslate\">EmailValidator</code></a> pour valider que la valeur donnée est une adresse de courriel valide, en utilisant une expression régulière moyennement complexe.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code></p></li>\n</ul>\n<p>Possède les paramètres facultatifs <code class=\"docutils literal notranslate\">max_length</code>, <code class=\"docutils literal notranslate\">min_length</code> et <code class=\"docutils literal notranslate\">empty_value</code>, qui fonctionnent exactement comme pour <a class=\"reference internal\" href=\"#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\">CharField</code></a>. Le paramètre <code class=\"docutils literal notranslate\">max_length</code> contient par défaut 320 (voir <span class=\"target\" id=\"index-4\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc3696.html#section-3\"><strong>RFC 3696 Section 3</strong></a>).</p>\n</dd></dl>\n\n</section>\n<section id=\"filefield\">\n<h3><code class=\"docutils literal notranslate\">FileField</code><a class=\"heading-anchor\" href=\"#filefield\"><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.forms.FileField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">FileField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.FileField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.ClearableFileInput\" title=\"django.forms.ClearableFileInput\"><code class=\"xref py py-class docutils literal notranslate\">ClearableFileInput</code></a></p></li>\n<li><p>Valeur vide : <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Est normalisé en : un objet <code class=\"docutils literal notranslate\">UploadedFile</code> englobant le contenu du fichier et son nom dans un seul objet.</p></li>\n<li><p>Peut valider que des données de fichier non vides ont été fournies au formulaire.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code>, <code class=\"docutils literal notranslate\">missing</code>, <code class=\"docutils literal notranslate\">empty</code>, <code class=\"docutils literal notranslate\">max_length</code></p></li>\n</ul>\n<p>Accepte les paramètres facultatifs pour la validation, <code class=\"docutils literal notranslate\">max_length</code> et <code class=\"docutils literal notranslate\">allow_empty_file</code>. S’ils sont présents, ils garantissent respectivement que la longueur du nom de fichier ne dépasse pas la longueur indiquée et que la validation passe même quand le contenu du fichier est vide.</p>\n<p>Pour en savoir plus au sujet de l’objet <code class=\"docutils literal notranslate\">UploadedFile</code>, consultez la <a class=\"reference internal\" href=\"/fr/6.1/topics/http/file-uploads/\"><span class=\"doc\">documentation sur les envois de fichiers</span></a>.</p>\n<p>Lorsque vous utilisez un champ <code class=\"docutils literal notranslate\">FileField</code> dans un formulaire, vous ne devez pas oublier de <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/api/#binding-uploaded-files\"><span class=\"std std-ref\">lier les données de fichier au formulaire</span></a>.</p>\n<p>L’erreur <code class=\"docutils literal notranslate\">max_length</code> porte sur la longueur du nom de fichier. Dans le message d’erreur de cette clé, <code class=\"docutils literal notranslate\">%(max)d</code> sera remplacé par la longueur maximale du nom de fichier et <code class=\"docutils literal notranslate\">%(length)d</code> sera remplacé par la longueur effective du nom de fichier.</p>\n</dd></dl>\n\n</section>\n<section id=\"filepathfield\">\n<h3><code class=\"docutils literal notranslate\">FilePathField</code><a class=\"heading-anchor\" href=\"#filepathfield\"><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.forms.FilePathField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">FilePathField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.FilePathField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.Select\" title=\"django.forms.Select\"><code class=\"xref py py-class docutils literal notranslate\">Select</code></a></p></li>\n<li><p>Valeur vide : <code class=\"docutils literal notranslate\">''</code> (une chaîne vide)</p></li>\n<li><p>Est normalisé en : une chaîne.</p></li>\n<li><p>Valide que le choix sélectionné existe dans la liste à choix.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid_choice</code></p></li>\n</ul>\n<p>Ce champ permet de choisir parmi des fichiers dans un répertoire désigné. Il accepte cinq paramètres supplémentaires ; seul <code class=\"docutils literal notranslate\">path</code> est obligatoire :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.FilePathField.path\">\n<span class=\"sig-name descname\">path</span><a class=\"heading-anchor\" href=\"#django.forms.FilePathField.path\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Le chemin absolu vers le répertoire dont le contenu doit être présent dans la liste. Ce répertoire doit exister.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.FilePathField.recursive\">\n<span class=\"sig-name descname\">recursive</span><a class=\"heading-anchor\" href=\"#django.forms.FilePathField.recursive\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Si <code class=\"docutils literal notranslate\">False</code> (valeur par défaut), seul le contenu au premier niveau de <code class=\"docutils literal notranslate\">path</code> sera à disposition dans les choix possibles. Si <code class=\"docutils literal notranslate\">True</code>, le répertoire sera parcouru récursivement et tous ses descendants seront inclus dans les choix possibles.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.FilePathField.match\">\n<span class=\"sig-name descname\">match</span><a class=\"heading-anchor\" href=\"#django.forms.FilePathField.match\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Un motif d’expression régulière ; seuls les fichiers dont les noms correspondent à cette expression seront disponibles dans la liste à choix.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.FilePathField.allow_files\">\n<span class=\"sig-name descname\">allow_files</span><a class=\"heading-anchor\" href=\"#django.forms.FilePathField.allow_files\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Facultatif. Vaut <code class=\"docutils literal notranslate\">True</code> ou <code class=\"docutils literal notranslate\">False</code>. La valeur par défaut est <code class=\"docutils literal notranslate\">True</code>. Indique si les fichiers de l’emplacement spécifié doivent être inclus. Il faut que l’une des deux valeurs, ce champ ou <a class=\"reference internal\" href=\"#django.forms.FilePathField.allow_folders\" title=\"django.forms.FilePathField.allow_folders\"><code class=\"xref py py-attr docutils literal notranslate\">allow_folders</code></a>,  soit <code class=\"docutils literal notranslate\">True</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.FilePathField.allow_folders\">\n<span class=\"sig-name descname\">allow_folders</span><a class=\"heading-anchor\" href=\"#django.forms.FilePathField.allow_folders\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Facultatif. Vaut <code class=\"docutils literal notranslate\">True</code> ou <code class=\"docutils literal notranslate\">False</code>. La valeur par défaut est <code class=\"docutils literal notranslate\">False</code>. Indique si tous les répertoires à l’intérieur de l’emplacement spécifié doivent être inclus. Il faut que l’une des deux valeurs, ce champ ou <a class=\"reference internal\" href=\"#django.forms.FilePathField.allow_files\" title=\"django.forms.FilePathField.allow_files\"><code class=\"xref py py-attr docutils literal notranslate\">allow_files</code></a>,  soit <code class=\"docutils literal notranslate\">True</code>.</p>\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\">FilePathField</code> has the following method:</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.FilePathField.set_choices\">\n<span class=\"sig-name descname\">set_choices</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.FilePathField.set_choices\"><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=\"6.1\" role=\"note\">\n<p class=\"version-note-title\">New in Django 6.1</p></aside>\n<p>Scans the directory at <a class=\"reference internal\" href=\"#django.forms.FilePathField.path\" title=\"django.forms.FilePathField.path\"><code class=\"xref py py-attr docutils literal notranslate\">path</code></a> and refreshes the field’s\nchoices. This is called automatically during <code class=\"docutils literal notranslate\">__init__()</code>, but it can\nalso be called explicitly to pick up files added to the directory\nafter the field was first instantiated (usually at server startup). For\nexample, call it in a form’s <code class=\"docutils literal notranslate\">__init__()</code> to get fresh choices per\nrequest:</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\">MyForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n    my_file <span class=\"o\">=</span> forms<span class=\"o\">.</span>FilePathField<span class=\"p\">(</span>path<span class=\"o\">=</span><span class=\"s2\">&quot;/path/to/dir&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>fields<span class=\"p\">[</span><span class=\"s2\">&quot;my_file&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span>set_choices<span class=\"p\">()</span>\n</code></pre></div>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"floatfield\">\n<h3><code class=\"docutils literal notranslate\">FloatField</code><a class=\"heading-anchor\" href=\"#floatfield\"><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.forms.FloatField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">FloatField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.FloatField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.NumberInput\" title=\"django.forms.NumberInput\"><code class=\"xref py py-class docutils literal notranslate\">NumberInput</code></a> lorsque <a class=\"reference internal\" href=\"#django.forms.Field.localize\" title=\"django.forms.Field.localize\"><code class=\"xref py py-attr docutils literal notranslate\">Field.localize</code></a> vaut <code class=\"docutils literal notranslate\">False</code>, sinon <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a>.</p></li>\n<li><p>Valeur vide : <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Est normalisé en : un objet Python float.</p></li>\n<li><p>Valide que la valeur donnée est un nombre à virgule (<code class=\"docutils literal notranslate\">float</code>). Utilise <a class=\"reference internal\" href=\"/fr/6.1/ref/validators/#django.core.validators.MaxValueValidator\" title=\"django.core.validators.MaxValueValidator\"><code class=\"xref py py-class docutils literal notranslate\">MaxValueValidator</code></a> et <a class=\"reference internal\" href=\"/fr/6.1/ref/validators/#django.core.validators.MinValueValidator\" title=\"django.core.validators.MinValueValidator\"><code class=\"xref py py-class docutils literal notranslate\">MinValueValidator</code></a> si <code class=\"docutils literal notranslate\">max_value</code> et <code class=\"docutils literal notranslate\">min_value</code> sont fournis. Utilise <a class=\"reference internal\" href=\"/fr/6.1/ref/validators/#django.core.validators.StepValueValidator\" title=\"django.core.validators.StepValueValidator\"><code class=\"xref py py-class docutils literal notranslate\">StepValueValidator</code></a> si <code class=\"docutils literal notranslate\">step_size</code> est fourni. Les espaces de début et de fin sont permis, comme pour la fonction <code class=\"docutils literal notranslate\">float()</code> de Python.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code>, <code class=\"docutils literal notranslate\">max_value</code>, <code class=\"docutils literal notranslate\">min_value</code>, <code class=\"docutils literal notranslate\">step_size</code>.</p></li>\n</ul>\n<p>Accepte trois paramètres facultatifs :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.FloatField.max_value\">\n<span class=\"sig-name descname\">max_value</span><a class=\"heading-anchor\" href=\"#django.forms.FloatField.max_value\"><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 attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.FloatField.min_value\">\n<span class=\"sig-name descname\">min_value</span><a class=\"heading-anchor\" href=\"#django.forms.FloatField.min_value\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ces paramètres contrôlent l’intervalle des valeurs autorisées dans ce champ.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.FloatField.step_size\">\n<span class=\"sig-name descname\">step_size</span><a class=\"heading-anchor\" href=\"#django.forms.FloatField.step_size\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Limite la validité des entrées à un multiple entier de <code class=\"docutils literal notranslate\">step_size</code>. Si <code class=\"docutils literal notranslate\">min_value</code> est aussi indiquée, elle est ajoutée comme valeur de décalage pour déterminer si la taille de pas correspond.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"genericipaddressfield\">\n<h3><code class=\"docutils literal notranslate\">GenericIPAddressField</code><a class=\"heading-anchor\" href=\"#genericipaddressfield\"><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.forms.GenericIPAddressField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">GenericIPAddressField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.GenericIPAddressField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Un champ contenant soit une adresse IPv4, soit une adresse IPv6.</p>\n<ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a></p></li>\n<li><p>Valeur vide : <code class=\"docutils literal notranslate\">''</code> (une chaîne vide)</p></li>\n<li><p>Est normalisé en : une chaîne. Les adresses IPv6 sont normalisées selon la description ci-dessous.</p></li>\n<li><p>Valide que la valeur donnée est une adresse IP valide.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code>, <code class=\"docutils literal notranslate\">max_length</code></p></li>\n</ul>\n<p>La normalisation d’adresse IPv6 respecte la section 2.2 de la <span class=\"target\" id=\"index-5\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc4291.html#section-2.2\"><strong>RFC 4291 Section 2.2</strong></a>, y compris l’utilisation du format IPv4 suggéré dans le 3e paragraphe de cette section, comme <code class=\"docutils literal notranslate\">::ffff:192.0.2.0</code>. Par exemple, <code class=\"docutils literal notranslate\">2001:0::0:01</code> sera normalisé en <code class=\"docutils literal notranslate\">2001::1</code> et <code class=\"docutils literal notranslate\">::ffff:0a0a:0a0a</code> en <code class=\"docutils literal notranslate\">::ffff:10.10.10.10</code>. Tous les caractères sont convertis en minuscules.</p>\n<p>Accepte trois paramètres facultatifs :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.GenericIPAddressField.protocol\">\n<span class=\"sig-name descname\">protocol</span><a class=\"heading-anchor\" href=\"#django.forms.GenericIPAddressField.protocol\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Limite la validité des saisies au protocole indiqué. Les valeurs possibles sont <code class=\"docutils literal notranslate\">'both'</code> (les deux protocoles acceptés, valeur par défaut), <code class=\"docutils literal notranslate\">'IPv4'</code> ou <code class=\"docutils literal notranslate\">'IPv6'</code>. La correspondance n’est pas sensible à la casse.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.GenericIPAddressField.unpack_ipv4\">\n<span class=\"sig-name descname\">unpack_ipv4</span><a class=\"heading-anchor\" href=\"#django.forms.GenericIPAddressField.unpack_ipv4\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Décode les adresses IPv4 mappées comme <code class=\"docutils literal notranslate\">::ffff:192.0.2.1</code>. Si cette option est activée, cette adresse serait décodée en <code class=\"docutils literal notranslate\">192.0.2.1</code>. L’option est désactivée par défaut. Utilisable uniquement quand <code class=\"docutils literal notranslate\">protocol</code> est défini à <code class=\"docutils literal notranslate\">'both'</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.GenericIPAddressField.max_length\">\n<span class=\"sig-name descname\">max_length</span><a class=\"heading-anchor\" href=\"#django.forms.GenericIPAddressField.max_length\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>39 par défaut, et se comporte autrement comme pour un champ <a class=\"reference internal\" href=\"#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\">CharField</code></a>.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"imagefield\">\n<h3><code class=\"docutils literal notranslate\">ImageField</code><a class=\"heading-anchor\" href=\"#imagefield\"><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.forms.ImageField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ImageField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.ImageField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.ClearableFileInput\" title=\"django.forms.ClearableFileInput\"><code class=\"xref py py-class docutils literal notranslate\">ClearableFileInput</code></a></p></li>\n<li><p>Valeur vide : <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Est normalisé en : un objet <code class=\"docutils literal notranslate\">UploadedFile</code> englobant le contenu du fichier et son nom dans un seul objet.</p></li>\n<li><p>Valide que les données de fichier ont été liées au formulaire. Utilise aussi  <a class=\"reference internal\" href=\"/fr/6.1/ref/validators/#django.core.validators.FileExtensionValidator\" title=\"django.core.validators.FileExtensionValidator\"><code class=\"xref py py-class docutils literal notranslate\">FileExtensionValidator</code></a>  pour valider que l’extension de fichier est prise en charge par Pillow.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code>, <code class=\"docutils literal notranslate\">missing</code>, <code class=\"docutils literal notranslate\">empty</code>, <code class=\"docutils literal notranslate\">invalid_image</code></p></li>\n</ul>\n<p>L’emploi de <code class=\"docutils literal notranslate\">ImageField</code> requiert que <a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/pillow/\">pillow</a> soit installé et gère les formats d’image que vous utilisez. Si vous obtenez une erreur d’image corrompue (<code class=\"docutils literal notranslate\">corrupt image</code>) lorsque vous téléversez une image, cela signifie généralement que Pillow ne prend pas en charge son format. Pour corriger cela, installez la bibliothèque correspondante et réinstallez Pillow.</p>\n<p>Lorsque vous utilisez un champ <code class=\"docutils literal notranslate\">ImageField</code> dans un formulaire, vous ne devez pas oublier de <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/api/#binding-uploaded-files\"><span class=\"std std-ref\">lier les données de fichier au formulaire</span></a>.</p>\n<p>Après que le champ a été nettoyé et validé, l’objet <code class=\"docutils literal notranslate\">UploadedFile</code> comportera un attribut supplémentaire <code class=\"docutils literal notranslate\">image</code> contenant l’instance <a class=\"reference external\" href=\"https://pillow.readthedocs.io/en/latest/reference/Image.html\">Image</a> de Pillow utilisée pour contrôler que le fichier est une image valide. Pillow ferme le descripteur de fichier sous-jacent après avoir vérifié l’image ; ainsi, alors que certains attributs de données non image tels que <code class=\"docutils literal notranslate\">format</code>, <code class=\"docutils literal notranslate\">height</code> et <code class=\"docutils literal notranslate\">width</code> sont accessibles, ce n’est pas le cas des méthodes qui accèdent aux données image sous-jacentes, telles que <code class=\"docutils literal notranslate\">getdata()</code> ou <code class=\"docutils literal notranslate\">getpixel()</code>, sauf si vous prenez la peine de réouvrir le fichier. Par exemple :</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">PIL</span> <span class=\"kn\">import</span> Image\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.core.files.uploadedfile</span> <span class=\"kn\">import</span> SimpleUploadedFile\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">ImageForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    img <span class=\"o\">=</span> forms<span class=\"o\">.</span>ImageField<span class=\"p\">()</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>file_data <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;img&quot;</span><span class=\"p\">:</span> SimpleUploadedFile<span class=\"p\">(</span><span class=\"s2\">&quot;test.png&quot;</span><span class=\"p\">,</span> <span class=\"sa\">b</span><span class=\"s2\">&quot;file data&quot;</span><span class=\"p\">)}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>form <span class=\"o\">=</span> ImageForm<span class=\"p\">({},</span> file_data<span class=\"p\">)</span>\n<span class=\"go\"># Pillow closes the underlying file descriptor.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>form<span class=\"o\">.</span>is_valid<span class=\"p\">()</span>\n<span class=\"go\">True</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>image_field <span class=\"o\">=</span> form<span class=\"o\">.</span>cleaned_data<span class=\"p\">[</span><span class=\"s2\">&quot;img&quot;</span><span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>image_field<span class=\"o\">.</span>image\n<span class=\"go\">&lt;PIL.PngImagePlugin.PngImageFile image mode=RGBA size=191x287 at 0x7F5985045C18&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>image_field<span class=\"o\">.</span>image<span class=\"o\">.</span>width\n<span class=\"go\">191</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>image_field<span class=\"o\">.</span>image<span class=\"o\">.</span>height\n<span class=\"go\">287</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>image_field<span class=\"o\">.</span>image<span class=\"o\">.</span>format\n<span class=\"go\">&#39;PNG&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>image_field<span class=\"o\">.</span>image<span class=\"o\">.</span>getdata<span class=\"p\">()</span>\n<span class=\"go\"># Raises AttributeError: &#39;NoneType&#39; object has no attribute &#39;seek&#39;.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>image <span class=\"o\">=</span> Image<span class=\"o\">.</span>open<span class=\"p\">(</span>image_field<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>image<span class=\"o\">.</span>getdata<span class=\"p\">()</span>\n<span class=\"go\">&lt;ImagingCore object at 0x7f5984f874b0&gt;</span>\n</code></pre></div>\n<p>De plus, <code class=\"docutils literal notranslate\">UploadedFile.content_type</code> sera également mis à jour avec le type de contenu de l’image pour autant que Pillow puisse le déterminer, sinon il prend la valeur <code class=\"docutils literal notranslate\">None</code>.</p>\n</dd></dl>\n\n</section>\n<section id=\"integerfield\">\n<h3><code class=\"docutils literal notranslate\">IntegerField</code><a class=\"heading-anchor\" href=\"#integerfield\"><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.forms.IntegerField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">IntegerField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.IntegerField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.NumberInput\" title=\"django.forms.NumberInput\"><code class=\"xref py py-class docutils literal notranslate\">NumberInput</code></a> lorsque <a class=\"reference internal\" href=\"#django.forms.Field.localize\" title=\"django.forms.Field.localize\"><code class=\"xref py py-attr docutils literal notranslate\">Field.localize</code></a> vaut <code class=\"docutils literal notranslate\">False</code>, sinon <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a>.</p></li>\n<li><p>Valeur vide : <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Est normalisé en : un nombre entier Python.</p></li>\n<li><p>Valide que la valeur donnée est un nombre entier. Utilise <a class=\"reference internal\" href=\"/fr/6.1/ref/validators/#django.core.validators.MaxValueValidator\" title=\"django.core.validators.MaxValueValidator\"><code class=\"xref py py-class docutils literal notranslate\">MaxValueValidator</code></a> et <a class=\"reference internal\" href=\"/fr/6.1/ref/validators/#django.core.validators.MinValueValidator\" title=\"django.core.validators.MinValueValidator\"><code class=\"xref py py-class docutils literal notranslate\">MinValueValidator</code></a> si <code class=\"docutils literal notranslate\">max_value</code> et <code class=\"docutils literal notranslate\">min_value</code> sont fournis. Utilise <a class=\"reference internal\" href=\"/fr/6.1/ref/validators/#django.core.validators.StepValueValidator\" title=\"django.core.validators.StepValueValidator\"><code class=\"xref py py-class docutils literal notranslate\">StepValueValidator</code></a> si <code class=\"docutils literal notranslate\">step_size</code> est fourni. Les espaces de début et de fin sont permis, comme pour la fonction <code class=\"docutils literal notranslate\">int()</code> de Python.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code>, <code class=\"docutils literal notranslate\">max_value</code>, <code class=\"docutils literal notranslate\">min_value</code>, <code class=\"docutils literal notranslate\">step_size</code></p></li>\n</ul>\n<p>Les messages d’erreur <code class=\"docutils literal notranslate\">max_value</code>, <code class=\"docutils literal notranslate\">min_value</code> et <code class=\"docutils literal notranslate\">step_size</code> peuvent contenir <code class=\"docutils literal notranslate\">%(limit_value)s</code>, qui sera remplacé par la limite concernée.</p>\n<p>Accepte trois paramètres facultatifs liés à la validation :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.IntegerField.max_value\">\n<span class=\"sig-name descname\">max_value</span><a class=\"heading-anchor\" href=\"#django.forms.IntegerField.max_value\"><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 attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.IntegerField.min_value\">\n<span class=\"sig-name descname\">min_value</span><a class=\"heading-anchor\" href=\"#django.forms.IntegerField.min_value\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ces paramètres contrôlent l’intervalle des valeurs autorisées dans ce champ.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.IntegerField.step_size\">\n<span class=\"sig-name descname\">step_size</span><a class=\"heading-anchor\" href=\"#django.forms.IntegerField.step_size\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Limite la validité des entrées à un multiple entier de <code class=\"docutils literal notranslate\">step_size</code>. Si <code class=\"docutils literal notranslate\">min_value</code> est aussi indiquée, elle est ajoutée comme valeur de décalage pour déterminer si la taille de pas correspond.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"jsonfield\">\n<h3><code class=\"docutils literal notranslate\">JSONField</code><a class=\"heading-anchor\" href=\"#jsonfield\"><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.forms.JSONField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">JSONField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">encoder<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">decoder<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.JSONField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Un champ qui accepte des données codées en JSON pour un champ <a class=\"reference internal\" href=\"/fr/6.1/ref/models/fields/#django.db.models.JSONField\" title=\"django.db.models.JSONField\"><code class=\"xref py py-class docutils literal notranslate\">JSONField</code></a>.</p>\n<ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.Textarea\" title=\"django.forms.Textarea\"><code class=\"xref py py-class docutils literal notranslate\">Textarea</code></a></p></li>\n<li><p>Valeur vide : <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Est normalisé en : une représentation Python de la valeur JSON (habituellement une valeur <code class=\"docutils literal notranslate\">dict</code>, <code class=\"docutils literal notranslate\">list</code> ou <code class=\"docutils literal notranslate\">None</code>), en fonction de <a class=\"reference internal\" href=\"#django.forms.JSONField.decoder\" title=\"django.forms.JSONField.decoder\"><code class=\"xref py py-attr docutils literal notranslate\">JSONField.decoder</code></a>.</p></li>\n<li><p>Valide que la valeur donnée est une structure JSON valide.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code></p></li>\n</ul>\n<p>Accepte deux paramètres facultatifs :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.JSONField.encoder\">\n<span class=\"sig-name descname\">encoder</span><a class=\"heading-anchor\" href=\"#django.forms.JSONField.encoder\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Une sous-classe de <a class=\"reference external\" href=\"https://docs.python.org/3/library/json.html#json.JSONEncoder\" title=\"(disponible dans Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">json.JSONEncoder</code></a> pour sérialiser les types de données non prises en charge par le sérialiseur JSON standard (par ex. <code class=\"docutils literal notranslate\">datetime.datetime</code> ou <a class=\"reference external\" href=\"https://docs.python.org/3/library/uuid.html#uuid.UUID\" title=\"(disponible dans Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">UUID</code></a>). Par exemple, vous pouvez utiliser la classe <a class=\"reference internal\" href=\"/fr/6.1/topics/serialization/#django.core.serializers.json.DjangoJSONEncoder\" title=\"django.core.serializers.json.DjangoJSONEncoder\"><code class=\"xref py py-class docutils literal notranslate\">DjangoJSONEncoder</code></a>.</p>\n<p>Contient <code class=\"docutils literal notranslate\">json.JSONEncoder</code> par défaut.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.JSONField.decoder\">\n<span class=\"sig-name descname\">decoder</span><a class=\"heading-anchor\" href=\"#django.forms.JSONField.decoder\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Une sous-classe de <a class=\"reference external\" href=\"https://docs.python.org/3/library/json.html#json.JSONDecoder\" title=\"(disponible dans Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">json.JSONDecoder</code></a> pour désérialiser l’entrée. La désérialisation pourrait devoir tenir compte de l’incertitude liée au type de la valeur d’entrée. Par exemple, vous courez le risque de renvoyer un objet <code class=\"docutils literal notranslate\">datetime</code> qui était en fait une chaîne qui était fortuitement au même format que celui choisi pour les objets <code class=\"docutils literal notranslate\">datetime</code>.</p>\n<p>Le <code class=\"docutils literal notranslate\">decoder</code> peut être utiliser pour valider les données entrées. Si <a class=\"reference external\" href=\"https://docs.python.org/3/library/json.html#json.JSONDecodeError\" title=\"(disponible dans Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">json.JSONDecodeError</code></a> est générée durant la désérialisation, une exception <code class=\"docutils literal notranslate\">ValidationError</code> sera produite.</p>\n<p>Contient <code class=\"docutils literal notranslate\">json.JSONDecoder</code> par défaut.</p>\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Si vous utilisez un formulaire <a class=\"reference internal\" href=\"/fr/6.1/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\">ModelForm</code></a>, ce sont les paramètres <code class=\"docutils literal notranslate\">encoder</code> et <code class=\"docutils literal notranslate\">decoder</code> de <a class=\"reference internal\" href=\"/fr/6.1/ref/models/fields/#django.db.models.JSONField\" title=\"django.db.models.JSONField\"><code class=\"xref py py-class docutils literal notranslate\">JSONField</code></a> qui seront utilisés.</p>\n</aside>\n<aside class=\"admonition-user-friendly-forms admonition\" role=\"note\">\n<p class=\"admonition-title\">Formulaires conviviaux</p>\n<p><code class=\"docutils literal notranslate\">JSONField</code> n’est pas particulièrement convivial dans la plupart des cas. Il s’agit cependant d’une manière utile de mettre en forme des données d’un composant côté client en vue de son envoi vers le serveur.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"multiplechoicefield\">\n<h3><code class=\"docutils literal notranslate\">MultipleChoiceField</code><a class=\"heading-anchor\" href=\"#multiplechoicefield\"><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.forms.MultipleChoiceField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">MultipleChoiceField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.MultipleChoiceField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.SelectMultiple\" title=\"django.forms.SelectMultiple\"><code class=\"xref py py-class docutils literal notranslate\">SelectMultiple</code></a></p></li>\n<li><p>Valeur vide : <code class=\"docutils literal notranslate\">[]</code> (une liste vide)</p></li>\n<li><p>Est normalisé en : une liste de chaînes.</p></li>\n<li><p>Valide que chaque valeur dans la liste donnée existe dans la liste à choix.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid_choice</code>, <code class=\"docutils literal notranslate\">invalid_list</code></p></li>\n</ul>\n<p>Le message d’erreur <code class=\"docutils literal notranslate\">invalid_choice</code> peut contenir <code class=\"docutils literal notranslate\">%(value)s</code>, qui sera remplacé par le choix sélectionné.</p>\n<p>Requiert un paramètre supplémentaire obligatoire, <code class=\"docutils literal notranslate\">choices</code>, comme pour <a class=\"reference internal\" href=\"#django.forms.ChoiceField\" title=\"django.forms.ChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">ChoiceField</code></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"nullbooleanfield\">\n<h3><code class=\"docutils literal notranslate\">NullBooleanField</code><a class=\"heading-anchor\" href=\"#nullbooleanfield\"><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.forms.NullBooleanField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">NullBooleanField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.NullBooleanField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.NullBooleanSelect\" title=\"django.forms.NullBooleanSelect\"><code class=\"xref py py-class docutils literal notranslate\">NullBooleanSelect</code></a></p></li>\n<li><p>Valeur vide : <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Est normalisé en : une valeur Python <code class=\"docutils literal notranslate\">True</code>, <code class=\"docutils literal notranslate\">False</code> ou <code class=\"docutils literal notranslate\">None</code>.</p></li>\n<li><p>Ne valide rien (c’est-à-dire qu’il n’y a jamais d’exception <code class=\"docutils literal notranslate\">ValidationError</code>).</p></li>\n</ul>\n<p><code class=\"docutils literal notranslate\">NullBooleanField</code> peut être utilisé avec des composants tels que <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.Select\" title=\"django.forms.Select\"><code class=\"xref py py-class docutils literal notranslate\">Select</code></a> ou <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.RadioSelect\" title=\"django.forms.RadioSelect\"><code class=\"xref py py-class docutils literal notranslate\">RadioSelect</code></a> en indiquant les choix <code class=\"docutils literal notranslate\">choices</code> du composant</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>NullBooleanField<span class=\"p\">(</span>\n    widget<span class=\"o\">=</span>Select<span class=\"p\">(</span>\n        choices<span class=\"o\">=</span><span class=\"p\">[</span>\n            <span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Unknown&quot;</span><span class=\"p\">),</span>\n            <span class=\"p\">(</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Yes&quot;</span><span class=\"p\">),</span>\n            <span class=\"p\">(</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"s2\">&quot;No&quot;</span><span class=\"p\">),</span>\n        <span class=\"p\">]</span>\n    <span class=\"p\">)</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"regexfield\">\n<h3><code class=\"docutils literal notranslate\">RegexField</code><a class=\"heading-anchor\" href=\"#regexfield\"><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.forms.RegexField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RegexField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.RegexField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a></p></li>\n<li><p>Valeur vide : ce qui a été indiqué dans <code class=\"docutils literal notranslate\">empty_value</code>.</p></li>\n<li><p>Est normalisé en : une chaîne.</p></li>\n<li><p>Utilise <a class=\"reference internal\" href=\"/fr/6.1/ref/validators/#django.core.validators.RegexValidator\" title=\"django.core.validators.RegexValidator\"><code class=\"xref py py-class docutils literal notranslate\">RegexValidator</code></a> pour valider que la valeur donnée correspond à une certaine expression régulière.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code></p></li>\n</ul>\n<p>Requiert un paramètre supplémentaire obligatoire :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.RegexField.regex\">\n<span class=\"sig-name descname\">regex</span><a class=\"heading-anchor\" href=\"#django.forms.RegexField.regex\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Une expression régulière exprimée sous forme de chaîne ou d’objet expression régulière compilée.</p>\n</dd></dl>\n\n<p>Accepte également <code class=\"docutils literal notranslate\">max_length</code>, <code class=\"docutils literal notranslate\">min_length</code>, <code class=\"docutils literal notranslate\">strip</code> et <code class=\"docutils literal notranslate\">empty_value</code>, qui fonctionnent exactement comme pour <a class=\"reference internal\" href=\"#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\">CharField</code></a>.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.RegexField.strip\">\n<span class=\"sig-name descname\">strip</span><a class=\"heading-anchor\" href=\"#django.forms.RegexField.strip\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Contient <code class=\"docutils literal notranslate\">False</code> par défaut. Quand ce paramètre est activé, l’épuration des espaces initiales et finales s’effectue avant la validation par l’expression régulière.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"slugfield\">\n<h3><code class=\"docutils literal notranslate\">SlugField</code><a class=\"heading-anchor\" href=\"#slugfield\"><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.forms.SlugField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">SlugField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.SlugField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a></p></li>\n<li><p>Valeur vide : ce qui a été indiqué dans <a class=\"reference internal\" href=\"#django.forms.SlugField.empty_value\" title=\"django.forms.SlugField.empty_value\"><code class=\"xref py py-attr docutils literal notranslate\">empty_value</code></a>.</p></li>\n<li><p>Est normalisé en : une chaîne.</p></li>\n<li><p>Utilise <a class=\"reference internal\" href=\"/fr/6.1/ref/validators/#django.core.validators.validate_slug\" title=\"django.core.validators.validate_slug\"><code class=\"xref py py-class docutils literal notranslate\">validate_slug</code></a> ou <a class=\"reference internal\" href=\"/fr/6.1/ref/validators/#django.core.validators.validate_unicode_slug\" title=\"django.core.validators.validate_unicode_slug\"><code class=\"xref py py-class docutils literal notranslate\">validate_unicode_slug</code></a> pour valider que la valeur donnée ne contient que des lettres, des nombres, des soulignements et des tirets.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code></p></li>\n</ul>\n<p>Ce champ est prévu pour l’affichage des champs de modèle <a class=\"reference internal\" href=\"/fr/6.1/ref/models/fields/#django.db.models.SlugField\" title=\"django.db.models.SlugField\"><code class=\"xref py py-class docutils literal notranslate\">SlugField</code></a> dans les formulaires.</p>\n<p>Accepte deux paramètres facultatifs :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.SlugField.allow_unicode\">\n<span class=\"sig-name descname\">allow_unicode</span><a class=\"heading-anchor\" href=\"#django.forms.SlugField.allow_unicode\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Une valeur booléenne indiquant au champ d’accepter des lettres Unicode en plus des lettres ASCII de base. La valeur par défaut est <code class=\"docutils literal notranslate\">False</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.SlugField.empty_value\">\n<span class=\"sig-name descname\">empty_value</span><a class=\"heading-anchor\" href=\"#django.forms.SlugField.empty_value\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>La valeur à utiliser pour représenter une valeur vide. Contient une chaîne vide par défaut.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"timefield\">\n<h3><code class=\"docutils literal notranslate\">TimeField</code><a class=\"heading-anchor\" href=\"#timefield\"><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.forms.TimeField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TimeField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.TimeField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.TimeInput\" title=\"django.forms.TimeInput\"><code class=\"xref py py-class docutils literal notranslate\">TimeInput</code></a></p></li>\n<li><p>Valeur vide : <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Est normalisé en : un objet Python <code class=\"docutils literal notranslate\">datetime.time</code>.</p></li>\n<li><p>Valide que la valeur donnée est un objet <code class=\"docutils literal notranslate\">datetime.time</code> ou une chaîne mise en forme dans un format d’heure particulier.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code></p></li>\n</ul>\n<p>Accepte un paramètre facultatif :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.TimeField.input_formats\">\n<span class=\"sig-name descname\">input_formats</span><a class=\"heading-anchor\" href=\"#django.forms.TimeField.input_formats\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Un objet itérable de chaînes de format utilisées pour essayer de convertir une chaîne en un objet <code class=\"docutils literal notranslate\">datetime.time</code> valide.</p>\n</dd></dl>\n\n<p>Si aucun paramètre <code class=\"docutils literal notranslate\">input_formats</code> n’est indiqué, les formats d’entrée par défaut sont lus dans la clé <code class=\"docutils literal notranslate\">TIME_INPUT_FORMATS</code> du format de langue actif, ou dans le réglage <a class=\"reference internal\" href=\"/fr/6.1/ref/settings/#std-setting-TIME_INPUT_FORMATS\"><code class=\"xref std std-setting docutils literal notranslate\">TIME_INPUT_FORMATS</code></a> si la régionalisation est désactivée. Voir aussi la <a class=\"reference internal\" href=\"/fr/6.1/topics/i18n/formatting/\"><span class=\"doc\">régionalisation des formats</span></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"typedchoicefield\">\n<h3><code class=\"docutils literal notranslate\">TypedChoiceField</code><a class=\"heading-anchor\" href=\"#typedchoicefield\"><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.forms.TypedChoiceField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TypedChoiceField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.TypedChoiceField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Similaire à <a class=\"reference internal\" href=\"#django.forms.ChoiceField\" title=\"django.forms.ChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">ChoiceField</code></a>, sauf que <a class=\"reference internal\" href=\"#django.forms.TypedChoiceField\" title=\"django.forms.TypedChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">TypedChoiceField</code></a> accepte deux paramètres supplémentaires, <a class=\"reference internal\" href=\"#django.forms.TypedChoiceField.coerce\" title=\"django.forms.TypedChoiceField.coerce\"><code class=\"xref py py-attr docutils literal notranslate\">coerce</code></a> et <a class=\"reference internal\" href=\"#django.forms.TypedChoiceField.empty_value\" title=\"django.forms.TypedChoiceField.empty_value\"><code class=\"xref py py-attr docutils literal notranslate\">empty_value</code></a>.</p>\n<ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.Select\" title=\"django.forms.Select\"><code class=\"xref py py-class docutils literal notranslate\">Select</code></a></p></li>\n<li><p>Valeur vide : ce qui a été indiqué dans <a class=\"reference internal\" href=\"#django.forms.TypedChoiceField.empty_value\" title=\"django.forms.TypedChoiceField.empty_value\"><code class=\"xref py py-attr docutils literal notranslate\">empty_value</code></a>.</p></li>\n<li><p>Est normalisé en : une valeur du type indiqué par le paramètre <a class=\"reference internal\" href=\"#django.forms.TypedChoiceField.coerce\" title=\"django.forms.TypedChoiceField.coerce\"><code class=\"xref py py-attr docutils literal notranslate\">coerce</code></a>.</p></li>\n<li><p>Valide que la valeur donnée existe dans la liste à choix et qu’elle peut être transformée dans le bon type.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid_choice</code></p></li>\n</ul>\n<p>Accepte des paramètres supplémentaires :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.TypedChoiceField.coerce\">\n<span class=\"sig-name descname\">coerce</span><a class=\"heading-anchor\" href=\"#django.forms.TypedChoiceField.coerce\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Une fonction acceptant un paramètre et renvoyant une valeur transtypée. Comme exemple, on peut mentionner les fonctions Python <code class=\"docutils literal notranslate\">int</code>, <code class=\"docutils literal notranslate\">float</code>, <code class=\"docutils literal notranslate\">bool</code> et les autres types. Par défaut, il s’agit de la fonction identité. Notez que le forçage de type se produit après la validation de saisie, il est donc possible de forcer une valeur qui n’est pas présente dans <code class=\"docutils literal notranslate\">choices</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.TypedChoiceField.empty_value\">\n<span class=\"sig-name descname\">empty_value</span><a class=\"heading-anchor\" href=\"#django.forms.TypedChoiceField.empty_value\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>La valeur utilisée pour signifier « vide ». Par défaut, il s’agit de la chaîne vide ; <code class=\"docutils literal notranslate\">None</code> est une autre option assez fréquente ici. Remarquez que le type de cette valeur ne sera pas transformé par le contenu du paramètre <code class=\"docutils literal notranslate\">coerce</code>, il faut donc la choisir en conséquence.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"typedmultiplechoicefield\">\n<h3><code class=\"docutils literal notranslate\">TypedMultipleChoiceField</code><a class=\"heading-anchor\" href=\"#typedmultiplechoicefield\"><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.forms.TypedMultipleChoiceField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TypedMultipleChoiceField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.TypedMultipleChoiceField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Similaire à <a class=\"reference internal\" href=\"#django.forms.MultipleChoiceField\" title=\"django.forms.MultipleChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">MultipleChoiceField</code></a>, sauf que <a class=\"reference internal\" href=\"#django.forms.TypedMultipleChoiceField\" title=\"django.forms.TypedMultipleChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">TypedMultipleChoiceField</code></a> accepte deux paramètres supplémentaires, <code class=\"docutils literal notranslate\">coerce</code> et <code class=\"docutils literal notranslate\">empty_value</code>.</p>\n<ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.SelectMultiple\" title=\"django.forms.SelectMultiple\"><code class=\"xref py py-class docutils literal notranslate\">SelectMultiple</code></a></p></li>\n<li><p>Valeur vide : ce qui a été indiqué dans <code class=\"docutils literal notranslate\">empty_value</code></p></li>\n<li><p>Est normalisé en : une liste de valeurs du type indiqué par le paramètre <code class=\"docutils literal notranslate\">coerce</code>.</p></li>\n<li><p>Valide que les valeurs données existent dans la liste à choix et qu’elles peuvent être transformées dans le bon type.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid_choice</code></p></li>\n</ul>\n<p>Le message d’erreur <code class=\"docutils literal notranslate\">invalid_choice</code> peut contenir <code class=\"docutils literal notranslate\">%(value)s</code>, qui sera remplacé par le choix sélectionné.</p>\n<p>Accepte deux paramètres supplémentaires, <code class=\"docutils literal notranslate\">coerce</code> et <code class=\"docutils literal notranslate\">empty_value</code>, comme pour <a class=\"reference internal\" href=\"#django.forms.TypedChoiceField\" title=\"django.forms.TypedChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">TypedChoiceField</code></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"urlfield\">\n<h3><code class=\"docutils literal notranslate\">URLField</code><a class=\"heading-anchor\" href=\"#urlfield\"><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.forms.URLField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">URLField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.URLField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.URLInput\" title=\"django.forms.URLInput\"><code class=\"xref py py-class docutils literal notranslate\">URLInput</code></a></p></li>\n<li><p>Valeur vide : ce qui a été indiqué dans <code class=\"docutils literal notranslate\">empty_value</code>.</p></li>\n<li><p>Est normalisé en : une chaîne.</p></li>\n<li><p>Utilise <a class=\"reference internal\" href=\"/fr/6.1/ref/validators/#django.core.validators.URLValidator\" title=\"django.core.validators.URLValidator\"><code class=\"xref py py-class docutils literal notranslate\">URLValidator</code></a> pour valider que la valeur donnée est une URL valide.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code></p></li>\n</ul>\n<p>Possède les paramètres facultatifs <code class=\"docutils literal notranslate\">max_length</code>, <code class=\"docutils literal notranslate\">min_length</code> et <code class=\"docutils literal notranslate\">empty_value</code>, qui fonctionnent exactement comme pour <a class=\"reference internal\" href=\"#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\">CharField</code></a>, ainsi qu’un argument supplémentaire :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.URLField.assume_scheme\">\n<span class=\"sig-name descname\">assume_scheme</span><a class=\"heading-anchor\" href=\"#django.forms.URLField.assume_scheme\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Le protocole supposé des URL qui n’en contiennent pas. Vaut <code class=\"docutils literal notranslate\">&quot;https&quot;</code> par défaut. Par exemple, si <code class=\"docutils literal notranslate\">assume_scheme</code> vaut <code class=\"docutils literal notranslate\">&quot;https&quot;</code> et que la valeur fournie est <code class=\"docutils literal notranslate\">&quot;exemple.com&quot;</code>, la valeur normalisée sera <code class=\"docutils literal notranslate\">&quot;https://exemple.com&quot;</code>.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"uuidfield\">\n<h3><code class=\"docutils literal notranslate\">UUIDField</code><a class=\"heading-anchor\" href=\"#uuidfield\"><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.forms.UUIDField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">UUIDField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.UUIDField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a></p></li>\n<li><p>Valeur vide : <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Est normalisé en : un objet <a class=\"reference external\" href=\"https://docs.python.org/3/library/uuid.html#uuid.UUID\" title=\"(disponible dans Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">UUID</code></a>.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code></p></li>\n</ul>\n<p>Ce champ accepte toute chaîne dans un format accepté par le paramètre <code class=\"docutils literal notranslate\">hex</code> du constructeur <a class=\"reference external\" href=\"https://docs.python.org/3/library/uuid.html#uuid.UUID\" title=\"(disponible dans Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">UUID</code></a>.</p>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"slightly-complex-built-in-field-classes\">\n<h2>Classes de champs <code class=\"docutils literal notranslate\">Field</code> intégrées plus complexes<a class=\"heading-anchor\" href=\"#slightly-complex-built-in-field-classes\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"combofield\">\n<h3><code class=\"docutils literal notranslate\">ComboField</code><a class=\"heading-anchor\" href=\"#combofield\"><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.forms.ComboField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ComboField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.ComboField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a></p></li>\n<li><p>Valeur vide : <code class=\"docutils literal notranslate\">''</code> (une chaîne vide)</p></li>\n<li><p>Est normalisé en : une chaîne.</p></li>\n<li><p>Valide que la valeur donnée est valide pour chacun des champs indiqués en paramètre de <code class=\"docutils literal notranslate\">ComboField</code>.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code></p></li>\n</ul>\n<p>Requiert un paramètre supplémentaire obligatoire :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ComboField.fields\">\n<span class=\"sig-name descname\">fields</span><a class=\"heading-anchor\" href=\"#django.forms.ComboField.fields\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>La liste des champs devant être utilisés pour valider la valeur du champ (dans l’ordre de leur présentation).</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> ComboField\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> ComboField<span class=\"p\">(</span>fields<span class=\"o\">=</span><span class=\"p\">[</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">),</span> EmailField<span class=\"p\">()])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"s2\">&quot;test@example.com&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;test@example.com&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"s2\">&quot;longemailaddress@example.com&quot;</span><span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">ValidationError</span>: [&#39;Ensure this value has at most 20 characters (it has 28).&#39;]\n</code></pre></div>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"multivaluefield\">\n<h3><code class=\"docutils literal notranslate\">MultiValueField</code><a class=\"heading-anchor\" href=\"#multivaluefield\"><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.forms.MultiValueField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">MultiValueField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">fields<span class=\"o\">=</span><span class=\"default_value\">()</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.MultiValueField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a></p></li>\n<li><p>Valeur vide : <code class=\"docutils literal notranslate\">''</code> (une chaîne vide)</p></li>\n<li><p>Est normalisé en : le type renvoyé par la méthode <code class=\"docutils literal notranslate\">compress</code> de la sous-classe.</p></li>\n<li><p>Valide que les valeurs données sont valides pour chacun des champs indiqués en paramètre de <code class=\"docutils literal notranslate\">MultiValueField</code>.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code>, <code class=\"docutils literal notranslate\">incomplete</code></p></li>\n</ul>\n<p>Agrège la logique de plusieurs champs qui produisent une seule valeur en commun.</p>\n<p>Ce champ est abstrait et doit être hérité. Au contraire des champs à valeur unique, les sous-classes de <a class=\"reference internal\" href=\"#django.forms.MultiValueField\" title=\"django.forms.MultiValueField\"><code class=\"xref py py-class docutils literal notranslate\">MultiValueField</code></a> ne doivent pas implémenter <a class=\"reference internal\" href=\"#django.forms.Field.clean\" title=\"django.forms.Field.clean\"><code class=\"xref py py-meth docutils literal notranslate\">clean()</code></a> mais plutôt <a class=\"reference internal\" href=\"#django.forms.MultiValueField.compress\" title=\"django.forms.MultiValueField.compress\"><code class=\"xref py py-meth docutils literal notranslate\">compress()</code></a>.</p>\n<p>Requiert un paramètre supplémentaire obligatoire :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.MultiValueField.fields\">\n<span class=\"sig-name descname\">fields</span><a class=\"heading-anchor\" href=\"#django.forms.MultiValueField.fields\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Un tuple de champs dont les valeurs sont nettoyées puis ultérieurement combinées en une seule valeur. Chaque valeur du champ est nettoyée par le champ correspondant dans <code class=\"docutils literal notranslate\">fields</code> – la première valeur est nettoyée par le premier champ, la deuxième valeur par le deuxième champ, etc. Lorsque tous les champs ont été nettoyés, la liste de ces valeurs est combinée en une valeur unique par <a class=\"reference internal\" href=\"#django.forms.MultiValueField.compress\" title=\"django.forms.MultiValueField.compress\"><code class=\"xref py py-meth docutils literal notranslate\">compress()</code></a>.</p>\n</dd></dl>\n\n<p>Accepte aussi des paramètre facultatifs :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.MultiValueField.require_all_fields\">\n<span class=\"sig-name descname\">require_all_fields</span><a class=\"heading-anchor\" href=\"#django.forms.MultiValueField.require_all_fields\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>La valeur par défaut est <code class=\"docutils literal notranslate\">True</code>, auquel cas une erreur de validation <code class=\"docutils literal notranslate\">required</code> est générée si aucune valeur n’est fournie pour aucun champ.</p>\n<p>Lorsque la valeur est <code class=\"docutils literal notranslate\">False</code>, l’attribut <a class=\"reference internal\" href=\"#django.forms.Field.required\" title=\"django.forms.Field.required\"><code class=\"xref py py-attr docutils literal notranslate\">Field.required</code></a> peut être défini à <code class=\"docutils literal notranslate\">False</code> pour des champs individuels pour les rendre facultatifs. Si aucune valeur n’est fournie pour un champ obligatoire, une erreur de validation <code class=\"docutils literal notranslate\">incomplete</code> est générée.</p>\n<p>Un message d’erreur <code class=\"docutils literal notranslate\">incomplete</code> par défaut peut être défini dans la sous-classe de <a class=\"reference internal\" href=\"#django.forms.MultiValueField\" title=\"django.forms.MultiValueField\"><code class=\"xref py py-class docutils literal notranslate\">MultiValueField</code></a>, ou il est possible de définir des messages différents pour chaque champ individuellement. 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=\"kn\">from</span> <span class=\"nn\">django.core.validators</span> <span class=\"kn\">import</span> RegexValidator\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PhoneField</span><span class=\"p\">(</span>MultiValueField<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        <span class=\"c1\"># Define one message for all fields.</span>\n        error_messages <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;incomplete&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Enter a country calling code and a phone number.&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"c1\"># Or define a different message for each field.</span>\n        fields <span class=\"o\">=</span> <span class=\"p\">(</span>\n            CharField<span class=\"p\">(</span>\n                error_messages<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;incomplete&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Enter a country calling code.&quot;</span><span class=\"p\">},</span>\n                validators<span class=\"o\">=</span><span class=\"p\">[</span>\n                    RegexValidator<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^[0-9]+$&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Enter a valid country calling code.&quot;</span><span class=\"p\">),</span>\n                <span class=\"p\">],</span>\n            <span class=\"p\">),</span>\n            CharField<span class=\"p\">(</span>\n                error_messages<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;incomplete&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Enter a phone number.&quot;</span><span class=\"p\">},</span>\n                validators<span class=\"o\">=</span><span class=\"p\">[</span>RegexValidator<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^[0-9]+$&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Enter a valid phone number.&quot;</span><span class=\"p\">)],</span>\n            <span class=\"p\">),</span>\n            CharField<span class=\"p\">(</span>\n                validators<span class=\"o\">=</span><span class=\"p\">[</span>RegexValidator<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^[0-9]+$&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Enter a valid extension.&quot;</span><span class=\"p\">)],</span>\n                required<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n            <span class=\"p\">),</span>\n        <span class=\"p\">)</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            error_messages<span class=\"o\">=</span>error_messages<span class=\"p\">,</span>\n            fields<span class=\"o\">=</span>fields<span class=\"p\">,</span>\n            require_all_fields<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n            <span class=\"o\">**</span>kwargs\n        <span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.MultiValueField.widget\">\n<span class=\"sig-name descname\">widget</span><a class=\"heading-anchor\" href=\"#django.forms.MultiValueField.widget\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Doit être une sous-classe de <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.MultiWidget\" title=\"django.forms.MultiWidget\"><code class=\"xref py py-class docutils literal notranslate\">django.forms.MultiWidget</code></a>. La valeur par défaut est <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a>, qui n’est probablement pas très utile dans ce cas.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.MultiValueField.compress\">\n<span class=\"sig-name descname\">compress</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_list</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.MultiValueField.compress\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Accepte une liste de valeurs valides et renvoie une version « compressée » de ces valeurs dans une seule valeur. Par exemple, <a class=\"reference internal\" href=\"#django.forms.SplitDateTimeField\" title=\"django.forms.SplitDateTimeField\"><code class=\"xref py py-class docutils literal notranslate\">SplitDateTimeField</code></a> est une sous-classe qui combine un champ heure et un champ date en un seul objet <code class=\"docutils literal notranslate\">datetime</code>.</p>\n<p>Cette méthode doit être implémentée par les sous-classes.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"splitdatetimefield\">\n<h3><code class=\"docutils literal notranslate\">SplitDateTimeField</code><a class=\"heading-anchor\" href=\"#splitdatetimefield\"><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.forms.SplitDateTimeField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">SplitDateTimeField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.SplitDateTimeField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.SplitDateTimeWidget\" title=\"django.forms.SplitDateTimeWidget\"><code class=\"xref py py-class docutils literal notranslate\">SplitDateTimeWidget</code></a></p></li>\n<li><p>Valeur vide : <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Est normalisé en : un objet Python <code class=\"docutils literal notranslate\">datetime.datetime</code>.</p></li>\n<li><p>Valide que la valeur donnée est un objet <code class=\"docutils literal notranslate\">datetime.datetime</code> ou une chaîne mise en forme dans un format de date/heure particulier.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code>, <code class=\"docutils literal notranslate\">invalid_date</code>, <code class=\"docutils literal notranslate\">invalid_time</code></p></li>\n</ul>\n<p>Accepte deux paramètres facultatifs :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.SplitDateTimeField.input_date_formats\">\n<span class=\"sig-name descname\">input_date_formats</span><a class=\"heading-anchor\" href=\"#django.forms.SplitDateTimeField.input_date_formats\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Une liste de chaînes de format utilisées pour essayer de convertir une chaîne en un objet <code class=\"docutils literal notranslate\">datetime.date</code> valide.</p>\n</dd></dl>\n\n<p>Si aucun paramètre <code class=\"docutils literal notranslate\">input_date_formats</code> n’est indiqué, ce sont les formats de saisie par défaut de <a class=\"reference internal\" href=\"#django.forms.DateField\" title=\"django.forms.DateField\"><code class=\"xref py py-class docutils literal notranslate\">DateField</code></a> qui sont utilisés.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.SplitDateTimeField.input_time_formats\">\n<span class=\"sig-name descname\">input_time_formats</span><a class=\"heading-anchor\" href=\"#django.forms.SplitDateTimeField.input_time_formats\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Une liste de chaînes de format utilisées pour essayer de convertir une chaîne en un objet <code class=\"docutils literal notranslate\">datetime.time</code> valide.</p>\n</dd></dl>\n\n<p>Si aucun paramètre <code class=\"docutils literal notranslate\">input_time_formats</code> n’est indiqué, ce sont les formats de saisie par défaut de <a class=\"reference internal\" href=\"#django.forms.TimeField\" title=\"django.forms.TimeField\"><code class=\"xref py py-class docutils literal notranslate\">TimeField</code></a> qui sont utilisés.</p>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"fields-which-handle-relationships\">\n<span id=\"id2\"></span><h2>Champs dédiés aux relations<a class=\"heading-anchor\" href=\"#fields-which-handle-relationships\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Deux champs sont disponibles pour représenter les relations entre modèles : <a class=\"reference internal\" href=\"#django.forms.ModelChoiceField\" title=\"django.forms.ModelChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceField</code></a> and <a class=\"reference internal\" href=\"#django.forms.ModelMultipleChoiceField\" title=\"django.forms.ModelMultipleChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">ModelMultipleChoiceField</code></a>. Ces deux champs exigent un seul paramètre <code class=\"docutils literal notranslate\">queryset</code> utilisé pour créer les choix du champ. Lors de la validation du formulaire, ces champs placent soit un objet de modèle (dans le cas de <code class=\"docutils literal notranslate\">ModelChoiceField</code>), soit plusieurs objets de modèle (dans le cas de <code class=\"docutils literal notranslate\">ModelMultipleChoiceField</code>) dans le dictionnaire <code class=\"docutils literal notranslate\">cleaned_data</code> du formulaire.</p>\n<p>Pour des usages plus complexes, il est possible d’indiquer <code class=\"docutils literal notranslate\">queryset=None</code> au moment de déclarer le champ de formulaire, puis de remplir <code class=\"docutils literal notranslate\">queryset</code> dans la méthode <code class=\"docutils literal notranslate\">__init__()</code> du formulaire :</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\">FooMultipleChoiceForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n    foo_select <span class=\"o\">=</span> forms<span class=\"o\">.</span>ModelMultipleChoiceField<span class=\"p\">(</span>queryset<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>fields<span class=\"p\">[</span><span class=\"s2\">&quot;foo_select&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span>queryset <span class=\"o\">=</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">ModelChoiceField</code> et <code class=\"docutils literal notranslate\">ModelMultipleChoiceField</code> ont les deux un attribut <code class=\"docutils literal notranslate\">iterator</code> qui spécifie la classe utilisée pour itérer sur le jeu de requête lors de la génération des choix. Voir <a class=\"reference internal\" href=\"#iterating-relationship-choices\"><span class=\"std std-ref\">Itération sur les choix relationnels</span></a> pour plus de détails.</p>\n<section id=\"modelchoicefield\">\n<h3><code class=\"docutils literal notranslate\">ModelChoiceField</code><a class=\"heading-anchor\" href=\"#modelchoicefield\"><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.forms.ModelChoiceField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ModelChoiceField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.Select\" title=\"django.forms.Select\"><code class=\"xref py py-class docutils literal notranslate\">Select</code></a></p></li>\n<li><p>Valeur vide : <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Est normalisé en : une instance de modèle.</p></li>\n<li><p>Valide que l’identifiant donné existe dans le jeu de requête.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid_choice</code></p></li>\n</ul>\n<p>Le message d’erreur <code class=\"docutils literal notranslate\">invalid_choice</code> peut contenir <code class=\"docutils literal notranslate\">%(value)s</code>, qui sera remplacé par le choix sélectionné.</p>\n<p>Permet de sélectionner un seul objet de modèle, adapté à la représentation d’une clé étrangère. Notez que le composant par défaut de <code class=\"docutils literal notranslate\">ModelChoiceField</code> devient difficilement utilisable au fur et à mesure que le nombre de choix possibles augmente. Il n’est pas recommandé de l’utiliser lorsque le nombre d’éléments à choix dépasse 100.</p>\n<p>Un seul paramètre est obligatoire :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceField.queryset\">\n<span class=\"sig-name descname\">queryset</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceField.queryset\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Un jeu de requête <code class=\"docutils literal notranslate\">QuerySet</code> d’objets de modèles constituant la source des choix possibles pour le champ et qui est utilisé aussi pour valider le choix de l’utilisateur. Il est évalué au moment du rendu du formulaire.</p>\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\">ModelChoiceField</code> accepte aussi plusieurs paramètres facultatifs :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceField.empty_label\">\n<span class=\"sig-name descname\">empty_label</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceField.empty_label\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>By default the <code class=\"docutils literal notranslate\">&lt;select&gt;</code> widget used by <code class=\"docutils literal notranslate\">ModelChoiceField</code> will\nhave an empty choice at the top of the list. You can change the text of\nthis label (which is <code class=\"docutils literal notranslate\">&quot;- Select an option -&quot;</code> by default) with the\n<code class=\"docutils literal notranslate\">empty_label</code> attribute, or you can disable the empty label entirely\nby setting <code class=\"docutils literal notranslate\">empty_label</code> to <code class=\"docutils literal notranslate\">None</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># A custom empty label</span>\nfield1 <span class=\"o\">=</span> forms<span class=\"o\">.</span>ModelChoiceField<span class=\"p\">(</span>queryset<span class=\"o\">=...</span><span class=\"p\">,</span> empty_label<span class=\"o\">=</span><span class=\"s2\">&quot;(Nothing)&quot;</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># No empty label</span>\nfield2 <span class=\"o\">=</span> forms<span class=\"o\">.</span>ModelChoiceField<span class=\"p\">(</span>queryset<span class=\"o\">=...</span><span class=\"p\">,</span> empty_label<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Notez qu’aucun choix vide n’est créé (quelle que soit la valeur de <code class=\"docutils literal notranslate\">empty_label</code>) si un champ <code class=\"docutils literal notranslate\">ModelChoiceField</code> est obligatoire et possède une valeur initiale par défaut, ou que son composant <code class=\"docutils literal notranslate\">widget</code> est class:~django.forms.RadioSelect et que son argument <a class=\"reference internal\" href=\"#django.forms.ModelChoiceField.blank\" title=\"django.forms.ModelChoiceField.blank\"><code class=\"xref py py-attr docutils literal notranslate\">blank</code></a> est <code class=\"docutils literal notranslate\">False</code>.</p>\n</dd></dl>\n\n<aside class=\"version-note version-changed\" data-version=\"6.1\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 6.1</p><p>The default empty label was changed from <code class=\"docutils literal notranslate\">&quot;---------&quot;</code> to\n<code class=\"docutils literal notranslate\">&quot;- Select an option -&quot;</code>.</p>\n</aside>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceField.to_field_name\">\n<span class=\"sig-name descname\">to_field_name</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceField.to_field_name\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ce paramètre facultatif est utilisé pour désigner le champ à utiliser comme valeur des choix dans le composant du champ. Contrôlez qu’il s’agit bien d’un champ unique du modèle, sinon la valeur sélectionnée pourrait correspondre à plus d’un objet. Par défaut ce paramètre vaut <code class=\"docutils literal notranslate\">None</code>, ce qui signifie que c’est la clé primaire de chaque objet qui est utilisée. 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=\"c1\"># No custom to_field_name</span>\nfield1 <span class=\"o\">=</span> forms<span class=\"o\">.</span>ModelChoiceField<span class=\"p\">(</span>queryset<span class=\"o\">=...</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>produirait :</p>\n<div class=\"code-block\" data-language=\"html\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Html</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Html code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">select</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_field1&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;field1&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">option</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;obj1.pk&quot;</span><span class=\"p\">&gt;</span>Object1<span class=\"p\">&lt;/</span><span class=\"nt\">option</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">option</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;obj2.pk&quot;</span><span class=\"p\">&gt;</span>Object2<span class=\"p\">&lt;/</span><span class=\"nt\">option</span><span class=\"p\">&gt;</span>\n...\n<span class=\"p\">&lt;/</span><span class=\"nt\">select</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>et :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># to_field_name provided</span>\nfield2 <span class=\"o\">=</span> forms<span class=\"o\">.</span>ModelChoiceField<span class=\"p\">(</span>queryset<span class=\"o\">=...</span><span class=\"p\">,</span> to_field_name<span class=\"o\">=</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>produirait :</p>\n<div class=\"code-block\" data-language=\"html\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Html</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Html code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">select</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_field2&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;field2&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">option</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;obj1.name&quot;</span><span class=\"p\">&gt;</span>Object1<span class=\"p\">&lt;/</span><span class=\"nt\">option</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">option</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;obj2.name&quot;</span><span class=\"p\">&gt;</span>Object2<span class=\"p\">&lt;/</span><span class=\"nt\">option</span><span class=\"p\">&gt;</span>\n...\n<span class=\"p\">&lt;/</span><span class=\"nt\">select</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceField.blank\">\n<span class=\"sig-name descname\">blank</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceField.blank\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Lors de l’utilisation du composant <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.RadioSelect\" title=\"django.forms.RadioSelect\"><code class=\"xref py py-class docutils literal notranslate\">RadioSelect</code></a>, cet argument booléen facultatif détermine si un choix vide est créé. Par défaut, <code class=\"docutils literal notranslate\">blank</code> vaut <code class=\"docutils literal notranslate\">False</code>, auquel cas aucun choix vide n’est créé.</p>\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\">ModelChoiceField</code> possède également cet attribut :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceField.iterator\">\n<span class=\"sig-name descname\">iterator</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceField.iterator\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>La classe d’itération utilisée pour générer les choix du champ à partir de <code class=\"docutils literal notranslate\">queryset</code>. Par défaut, <a class=\"reference internal\" href=\"#django.forms.ModelChoiceIterator\" title=\"django.forms.ModelChoiceIterator\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceIterator</code></a>.</p>\n</dd></dl>\n\n<p>La méthode <code class=\"docutils literal notranslate\">__str__()</code> du modèle sera appelée pour générer les représentations textuelles des objets à faire figurer dans les choix du champ. Pour fournir des représentations personnalisées, créez une sous-classe de <code class=\"docutils literal notranslate\">ModelChoiceField</code> et surchargez <code class=\"docutils literal notranslate\">label_from_instance</code>. Cette méthode reçoit un objet de modèle et doit renvoyer une chaîne représentative de l’objet. 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=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> ModelChoiceField\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyModelChoiceField</span><span class=\"p\">(</span>ModelChoiceField<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">label_from_instance</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> obj<span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;My Object #</span><span class=\"si\">%i</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> obj<span class=\"o\">.</span>id\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"modelmultiplechoicefield\">\n<h3><code class=\"docutils literal notranslate\">ModelMultipleChoiceField</code><a class=\"heading-anchor\" href=\"#modelmultiplechoicefield\"><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.forms.ModelMultipleChoiceField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ModelMultipleChoiceField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.ModelMultipleChoiceField\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Composant par défaut : <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.SelectMultiple\" title=\"django.forms.SelectMultiple\"><code class=\"xref py py-class docutils literal notranslate\">SelectMultiple</code></a></p></li>\n<li><p>Valeur vide : un <code class=\"docutils literal notranslate\">QuerySet</code> vide (<code class=\"docutils literal notranslate\">self.queryset.none()</code>)</p></li>\n<li><p>Est normalisé en : un <code class=\"docutils literal notranslate\">QuerySet</code> d’instances de modèles.</p></li>\n<li><p>Valide que chaque identifiant dans la liste donnée existe dans le jeu de requête.</p></li>\n<li><p>Clés de messages d’erreur : <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid_list</code>, <code class=\"docutils literal notranslate\">invalid_choice</code>, <code class=\"docutils literal notranslate\">invalid_pk_value</code></p></li>\n</ul>\n<p>Le message d’erreur <code class=\"docutils literal notranslate\">invalid_choice</code> peut contenir <code class=\"docutils literal notranslate\">%(value)s</code> et le message <code class=\"docutils literal notranslate\">invalid_pk_value</code> peut contenir <code class=\"docutils literal notranslate\">%(pk)s</code>, qui seront substitués par les valeurs appropriées.</p>\n<p>Permet la sélection d’un ou de plusieurs objets de modèles, adapté à la représentation de relations plusieurs-à-plusieurs. Comme pour <a class=\"reference internal\" href=\"#django.forms.ModelChoiceField\" title=\"django.forms.ModelChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceField</code></a>, vous pouvez utiliser <code class=\"docutils literal notranslate\">label_from_instance</code> afin de personnaliser les représentations des objets.</p>\n<p>Un seul paramètre est obligatoire :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelMultipleChoiceField.queryset\">\n<span class=\"sig-name descname\">queryset</span><a class=\"heading-anchor\" href=\"#django.forms.ModelMultipleChoiceField.queryset\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Identique à <a class=\"reference internal\" href=\"#django.forms.ModelChoiceField.queryset\" title=\"django.forms.ModelChoiceField.queryset\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceField.queryset</code></a>.</p>\n</dd></dl>\n\n<p>Accepte un paramètre facultatif :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelMultipleChoiceField.to_field_name\">\n<span class=\"sig-name descname\">to_field_name</span><a class=\"heading-anchor\" href=\"#django.forms.ModelMultipleChoiceField.to_field_name\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Identique à <a class=\"reference internal\" href=\"#django.forms.ModelChoiceField.to_field_name\" title=\"django.forms.ModelChoiceField.to_field_name\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceField.to_field_name</code></a>.</p>\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\">ModelMultipleChoiceField</code> possède également cet attribut :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelMultipleChoiceField.iterator\">\n<span class=\"sig-name descname\">iterator</span><a class=\"heading-anchor\" href=\"#django.forms.ModelMultipleChoiceField.iterator\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Identique à <a class=\"reference internal\" href=\"#django.forms.ModelChoiceField.iterator\" title=\"django.forms.ModelChoiceField.iterator\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceField.iterator</code></a>.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"iterating-relationship-choices\">\n<span id=\"id3\"></span><h3>Itération sur les choix relationnels<a class=\"heading-anchor\" href=\"#iterating-relationship-choices\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Par défaut, <a class=\"reference internal\" href=\"#django.forms.ModelChoiceField\" title=\"django.forms.ModelChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceField</code></a> et <a class=\"reference internal\" href=\"#django.forms.ModelMultipleChoiceField\" title=\"django.forms.ModelMultipleChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">ModelMultipleChoiceField</code></a> utilisent <a class=\"reference internal\" href=\"#django.forms.ModelChoiceIterator\" title=\"django.forms.ModelChoiceIterator\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceIterator</code></a> pour générer leur choix de champ <code class=\"docutils literal notranslate\">choices</code>.</p>\n<p>Lors de son itération, <code class=\"docutils literal notranslate\">ModelChoiceIterator</code> produit des choix de tuples à 2 éléments contenant des instances <a class=\"reference internal\" href=\"#django.forms.ModelChoiceIteratorValue\" title=\"django.forms.ModelChoiceIteratorValue\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceIteratorValue</code></a> comme premier élément <code class=\"docutils literal notranslate\">value</code> dans chaque choix. <code class=\"docutils literal notranslate\">ModelChoiceIteratorValue</code> enveloppe la valeur du choix tout en maintenant une référence à l’instance de modèle source pouvant être utilisée par exemple dans des implémentations de composants personnalisés pour ajouter des <a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/data-*\">attributs data-*</a> aux éléments <code class=\"docutils literal notranslate\">&lt;option&gt;</code>.</p>\n<p>Par exemple, considérons les modèles suivants :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Topping</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\">100</span><span class=\"p\">)</span>\n    price <span class=\"o\">=</span> models<span class=\"o\">.</span>DecimalField<span class=\"p\">(</span>decimal_places<span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> max_digits<span class=\"o\">=</span><span class=\"mi\">6</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>name\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Pizza</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    topping <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>Topping<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n</code></pre></div>\n<p>Vous pouvez utiliser une sous-classe de composant <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/widgets/#django.forms.Select\" title=\"django.forms.Select\"><code class=\"xref py py-class docutils literal notranslate\">Select</code></a> pour inclure la valeur de <code class=\"docutils literal notranslate\">Topping.price</code> sous forme d’attribut HTML <code class=\"docutils literal notranslate\">data-price</code> pour chaque élément <code class=\"docutils literal notranslate\">&lt;option&gt;</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n\n\n<span class=\"k\">class</span> <span class=\"nc\">ToppingSelect</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Select<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">create_option</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span> name<span class=\"p\">,</span> value<span class=\"p\">,</span> label<span class=\"p\">,</span> selected<span class=\"p\">,</span> index<span class=\"p\">,</span> subindex<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> attrs<span class=\"o\">=</span><span class=\"kc\">None</span>\n    <span class=\"p\">):</span>\n        option <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>create_option<span class=\"p\">(</span>\n            name<span class=\"p\">,</span> value<span class=\"p\">,</span> label<span class=\"p\">,</span> selected<span class=\"p\">,</span> index<span class=\"p\">,</span> subindex<span class=\"p\">,</span> attrs\n        <span class=\"p\">)</span>\n        <span class=\"k\">if</span> value<span class=\"p\">:</span>\n            option<span class=\"p\">[</span><span class=\"s2\">&quot;attrs&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;data-price&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> value<span class=\"o\">.</span>instance<span class=\"o\">.</span>price\n        <span class=\"k\">return</span> option\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PizzaForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>ModelForm<span class=\"p\">):</span>\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        model <span class=\"o\">=</span> Pizza\n        fields <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;topping&quot;</span><span class=\"p\">]</span>\n        widgets <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;topping&quot;</span><span class=\"p\">:</span> ToppingSelect<span class=\"p\">}</span>\n</code></pre></div>\n<p>Cela produira l’élément select pour <code class=\"docutils literal notranslate\">Pizza.topping</code> ainsi :</p>\n<div class=\"code-block\" data-language=\"html\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Html</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Html code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">select</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_topping&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;topping&quot;</span> <span class=\"na\">required</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">option</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;&quot;</span> <span class=\"na\">selected</span><span class=\"p\">&gt;</span>---------<span class=\"p\">&lt;/</span><span class=\"nt\">option</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">option</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;1&quot;</span> <span class=\"na\">data-price</span><span class=\"o\">=</span><span class=\"s\">&quot;1.50&quot;</span><span class=\"p\">&gt;</span>mushrooms<span class=\"p\">&lt;/</span><span class=\"nt\">option</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">option</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;2&quot;</span> <span class=\"na\">data-price</span><span class=\"o\">=</span><span class=\"s\">&quot;1.25&quot;</span><span class=\"p\">&gt;</span>onions<span class=\"p\">&lt;/</span><span class=\"nt\">option</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">option</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;3&quot;</span> <span class=\"na\">data-price</span><span class=\"o\">=</span><span class=\"s\">&quot;1.75&quot;</span><span class=\"p\">&gt;</span>peppers<span class=\"p\">&lt;/</span><span class=\"nt\">option</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">option</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;4&quot;</span> <span class=\"na\">data-price</span><span class=\"o\">=</span><span class=\"s\">&quot;2.00&quot;</span><span class=\"p\">&gt;</span>pineapple<span class=\"p\">&lt;/</span><span class=\"nt\">option</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">select</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Pour des usages plus avancés, vous pouvez créer des sous-classes de <code class=\"docutils literal notranslate\">ModelChoiceIterator</code> afin de personnaliser les choix de tuples à 2 éléments qui sont produits.</p>\n<section id=\"modelchoiceiterator\">\n<h4><code class=\"docutils literal notranslate\">ModelChoiceIterator</code><a class=\"heading-anchor\" href=\"#modelchoiceiterator\"><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.forms.ModelChoiceIterator\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ModelChoiceIterator</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">field</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceIterator\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>La classes par défaut attribuée à l’attribut <code class=\"docutils literal notranslate\">iterator</code> des champs <a class=\"reference internal\" href=\"#django.forms.ModelChoiceField\" title=\"django.forms.ModelChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceField</code></a> et <a class=\"reference internal\" href=\"#django.forms.ModelMultipleChoiceField\" title=\"django.forms.ModelMultipleChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">ModelMultipleChoiceField</code></a>. Un objet itérable produisant des choix de tuples à 2 éléments à partir du jeu de requête.</p>\n<p>Un seul paramètre est obligatoire :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceIterator.field\">\n<span class=\"sig-name descname\">field</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceIterator.field\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>L’instance <code class=\"docutils literal notranslate\">ModelChoiceField</code> ou <code class=\"docutils literal notranslate\">ModelMultipleChoiceField</code> sur laquelle itérer et qui produira les choix.</p>\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\">ModelChoiceIterator</code> possède la méthode suivante :</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceIterator.__iter__\">\n<span class=\"sig-name descname\">__iter__</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceIterator.__iter__\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Produit des choix de tuples à 2 éléments, au format <code class=\"docutils literal notranslate\">(value, label)</code> utilisé par <a class=\"reference internal\" href=\"#django.forms.ChoiceField.choices\" title=\"django.forms.ChoiceField.choices\"><code class=\"xref py py-attr docutils literal notranslate\">ChoiceField.choices</code></a>. Le premier élément <code class=\"docutils literal notranslate\">value</code> est une instance <a class=\"reference internal\" href=\"#django.forms.ModelChoiceIteratorValue\" title=\"django.forms.ModelChoiceIteratorValue\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceIteratorValue</code></a>.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"modelchoiceiteratorvalue\">\n<h4><code class=\"docutils literal notranslate\">ModelChoiceIteratorValue</code><a class=\"heading-anchor\" href=\"#modelchoiceiteratorvalue\"><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.forms.ModelChoiceIteratorValue\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ModelChoiceIteratorValue</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">value</em>, <em class=\"sig-param\">instance</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceIteratorValue\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Deux paramètres sont obligatoires :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceIteratorValue.value\">\n<span class=\"sig-name descname\">value</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceIteratorValue.value\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>La valeur du choix. Cette valeur est utilisée pour produire l’attribut <code class=\"docutils literal notranslate\">value</code> d’un élément  HTML <code class=\"docutils literal notranslate\">&lt;option&gt;</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceIteratorValue.instance\">\n<span class=\"sig-name descname\">instance</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceIteratorValue.instance\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>L’instance de modèle provenant du jeu de requête. On peut accéder à cette instance dans des implémentations personnalisées de <code class=\"docutils literal notranslate\">ChoiceWidget.create_option()</code> pour ajuster le code HTML produit.</p>\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\">ModelChoiceIteratorValue</code> possède la méthode suivante :</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceIteratorValue.__str__\">\n<span class=\"sig-name descname\">__str__</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceIteratorValue.__str__\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie <code class=\"docutils literal notranslate\">value</code>  comme chaîne qui sera produite en HTML.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n</section>\n</section>\n<section id=\"creating-custom-fields\">\n<h2>Création de champs personnalisés<a class=\"heading-anchor\" href=\"#creating-custom-fields\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Si les classes <code class=\"docutils literal notranslate\">Field</code> intégrées ne correspondent pas à vos besoins, vous pouvez créer des classes <code class=\"docutils literal notranslate\">Field</code> personnalisées. Pour cela, créez une sous-classe de <code class=\"docutils literal notranslate\">django.forms.Field</code>. Les seules exigences sont que la méthode <code class=\"docutils literal notranslate\">clean()</code> doit être implémentée et que la méthode <code class=\"docutils literal notranslate\">__init__()</code> accepte les paramètres de base mentionnés plus haut (<code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">label</code>, <code class=\"docutils literal notranslate\">initial</code>, <code class=\"docutils literal notranslate\">widget</code>, <code class=\"docutils literal notranslate\">help_text</code>).</p>\n<p>Si vous avez besoin de plus de flexibilité lors de la création d’une instance <code class=\"docutils literal notranslate\">BoundField</code>, il est aussi possible de personnaliser la manière d’accéder à un champ en surchargeant <a class=\"reference internal\" href=\"#django.forms.Field.bound_field_class\" title=\"django.forms.Field.bound_field_class\"><code class=\"xref py py-attr docutils literal notranslate\">bound_field_class</code></a> ou <a class=\"reference internal\" href=\"#django.forms.Field.get_bound_field\" title=\"django.forms.Field.get_bound_field\"><code class=\"xref py py-meth docutils literal notranslate\">Field.get_bound_field()</code></a>.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.get_bound_field\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">get_bound_field</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">form</em>, <em class=\"sig-param\">field_name</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Field.get_bound_field\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Accepte une instance de <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\">Form</code></a> et le nom du champ. L’instance <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/api/#django.forms.BoundField\" title=\"django.forms.BoundField\"><code class=\"xref py py-class docutils literal notranslate\">BoundField</code></a> renvoyée sera utilisée pour accéder au champ dans un gabarit.</p>\n</dd></dl>\n\n<p>Voir <a class=\"reference internal\" href=\"/fr/6.1/ref/forms/api/#custom-boundfield\"><span class=\"std std-ref\">Personnalisation de BoundField</span></a> pour des exemples de surcharge de <code class=\"docutils literal notranslate\">BoundField</code>.</p>\n</section>","rootId":"module-django.forms.fields","toc":[{"title":"Paramètres principaux des champs","anchor":"core-field-arguments","children":[{"title":"required","anchor":"required","children":[]},{"title":"label","anchor":"label","children":[]},{"title":"label_suffix","anchor":"label-suffix","children":[]},{"title":"initial","anchor":"initial","children":[]},{"title":"widget","anchor":"widget","children":[]},{"title":"help_text","anchor":"help-text","children":[]},{"title":"error_messages","anchor":"error-messages","children":[]},{"title":"validators","anchor":"validators","children":[]},{"title":"localize","anchor":"localize","children":[]},{"title":"disabled","anchor":"disabled","children":[]},{"title":"template_name","anchor":"template-name","children":[]},{"title":"bound_field_class","anchor":"bound-field-class","children":[]}]},{"title":"Contrôle des données de champ modifiées","anchor":"checking-if-the-field-data-has-changed","children":[{"title":"has_changed()","anchor":"has-changed","children":[]}]},{"title":"Classes de champs Field intégrées","anchor":"built-in-field-classes","children":[{"title":"BooleanField","anchor":"booleanfield","children":[]},{"title":"CharField","anchor":"charfield","children":[]},{"title":"ChoiceField","anchor":"choicefield","children":[]},{"title":"DateField","anchor":"datefield","children":[]},{"title":"DateTimeField","anchor":"datetimefield","children":[]},{"title":"DecimalField","anchor":"decimalfield","children":[]},{"title":"DurationField","anchor":"durationfield","children":[]},{"title":"EmailField","anchor":"emailfield","children":[]},{"title":"FileField","anchor":"filefield","children":[]},{"title":"FilePathField","anchor":"filepathfield","children":[]},{"title":"FloatField","anchor":"floatfield","children":[]},{"title":"GenericIPAddressField","anchor":"genericipaddressfield","children":[]},{"title":"ImageField","anchor":"imagefield","children":[]},{"title":"IntegerField","anchor":"integerfield","children":[]},{"title":"JSONField","anchor":"jsonfield","children":[]},{"title":"MultipleChoiceField","anchor":"multiplechoicefield","children":[]},{"title":"NullBooleanField","anchor":"nullbooleanfield","children":[]},{"title":"RegexField","anchor":"regexfield","children":[]},{"title":"SlugField","anchor":"slugfield","children":[]},{"title":"TimeField","anchor":"timefield","children":[]},{"title":"TypedChoiceField","anchor":"typedchoicefield","children":[]},{"title":"TypedMultipleChoiceField","anchor":"typedmultiplechoicefield","children":[]},{"title":"URLField","anchor":"urlfield","children":[]},{"title":"UUIDField","anchor":"uuidfield","children":[]}]},{"title":"Classes de champs Field intégrées plus complexes","anchor":"slightly-complex-built-in-field-classes","children":[{"title":"ComboField","anchor":"combofield","children":[]},{"title":"MultiValueField","anchor":"multivaluefield","children":[]},{"title":"SplitDateTimeField","anchor":"splitdatetimefield","children":[]}]},{"title":"Champs dédiés aux relations","anchor":"fields-which-handle-relationships","children":[{"title":"ModelChoiceField","anchor":"modelchoicefield","children":[]},{"title":"ModelMultipleChoiceField","anchor":"modelmultiplechoicefield","children":[]},{"title":"Itération sur les choix relationnels","anchor":"iterating-relationship-choices","children":[{"title":"ModelChoiceIterator","anchor":"modelchoiceiterator","children":[]},{"title":"ModelChoiceIteratorValue","anchor":"modelchoiceiteratorvalue","children":[]}]}]},{"title":"Création de champs personnalisés","anchor":"creating-custom-fields","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"Référence de l’API","url":"/fr/6.1/ref/"},{"docname":"ref/forms/index","title":"Formulaires","url":"/fr/6.1/ref/forms/"}],"prev":{"docname":"ref/forms/api","title":"L’API des formulaires","url":"/fr/6.1/ref/forms/api/"},"next":{"docname":"ref/forms/models","title":"Formulaires de modèles","url":"/fr/6.1/ref/forms/models/"},"formats":{"html":"/fr/6.1/ref/forms/fields/","markdown":"/fr/6.1/ref/forms/fields.md","json":"/fr/6.1/ref/forms/fields.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/ref/forms/fields.txt","official":"https://docs.djangoproject.com/fr/6.1/ref/forms/fields/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}