{"title":"Composants de formulaires (« widgets »)","version":"6.0","locale":"fr","docname":"ref/forms/widgets","url":"/fr/6.0/ref/forms/widgets/","canonical":"https://djangodocs.dev/fr/6.0/ref/forms/widgets/","summary":"Un composant de formulaire est la représentation Django d’un élément de saisie HTML. Le composant se charge de produire le code HTML et d’extraire les données qui…","html":"<span id=\"widgets\"></span><h1>Composants de formulaires (« widgets »)<a class=\"heading-anchor\" href=\"#module-django.forms.widgets\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Un composant de formulaire est la représentation Django d’un élément de saisie HTML. Le composant se charge de produire le code HTML et d’extraire les données qui lui sont propres dans un dictionnaire GET/POST.</p>\n<p>Le code HTML généré par les composants intégrés utilisent la syntaxe HTML5, avec l’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;!DOCTYPE</span> <span class=\"pre\">html&gt;</span></code>. Par exemple, les attributs booléens tels que <code class=\"docutils literal notranslate\"><span class=\"pre\">checked</span></code> sont préférés au style XHTML <code class=\"docutils literal notranslate\"><span class=\"pre\">checked='checked'</span></code>.</p>\n<aside class=\"admonition admonition-tip\">\n<p class=\"admonition-title\">Astuce</p>\n<p>Il ne faut pas confondre les composants avec les <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/fields/\"><span class=\"doc\">champs de formulaires</span></a>. Ces derniers se chargent de la logique de validation de la saisie et sont directement utilisés dans les gabarits. Les composants de formulaires s’occupent de produire le code HTML des éléments de saisie de formulaire dans les pages web ainsi que de l’extraction de données brutes envoyées. Cependant, les composants de formulaires doivent être <a class=\"reference internal\" href=\"#widget-to-field\"><span class=\"std std-ref\">attribués</span></a> aux champs de formulaires.</p>\n</aside>\n<section id=\"specifying-widgets\">\n<span id=\"widget-to-field\"></span><h2>Définition des composants<a class=\"heading-anchor\" href=\"#specifying-widgets\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Chaque fois que vous définissez un champ de formulaire, Django utilise un composant par défaut correspondant au type de donnée qui doit être affiché. Pour savoir quel composant est utilisé pour quel champ, consultez la documentation au sujet des <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/fields/#built-in-fields\"><span class=\"std std-ref\">Classes de champs Field intégrées</span></a>.</p>\n<p>Cependant, si vous souhaitez utiliser un autre composant pour un champ, utilisez le paramètre <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/fields/#django.forms.Field.widget\" title=\"django.forms.Field.widget\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">widget</span></code></a> dans la définition du champ. 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=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CommentForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">()</span>\n    <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">()</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">widget</span><span class=\"o\">=</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Textarea</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Ce code définit un formulaire avec un champ de commentaires utilisant un composant <a class=\"reference internal\" href=\"#django.forms.Textarea\" title=\"django.forms.Textarea\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Textarea</span></code></a> plus grand, plutôt que le composant <a class=\"reference internal\" href=\"#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextInput</span></code></a> par défaut.</p>\n</section>\n<section id=\"setting-arguments-for-widgets\">\n<h2>Définition de paramètres pour les composants<a class=\"heading-anchor\" href=\"#setting-arguments-for-widgets\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Beaucoup de composants acceptent des paramètres supplémentaires facultatifs ; ils peuvent être définis lors de l’attribution du composant au champ de formulaire. Dans l’exemple suivant, l’attribut <a class=\"reference internal\" href=\"#django.forms.SelectDateWidget.years\" title=\"django.forms.SelectDateWidget.years\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">years</span></code></a> est défini pour un composant <a class=\"reference internal\" href=\"#django.forms.SelectDateWidget\" title=\"django.forms.SelectDateWidget\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SelectDateWidget</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n\n<span class=\"n\">BIRTH_YEAR_CHOICES</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;1980&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;1981&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;1982&quot;</span><span class=\"p\">]</span>\n<span class=\"n\">FAVORITE_COLORS_CHOICES</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;blue&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Blue&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;green&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Green&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;black&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Black&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">SimpleForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">birth_year</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span>\n        <span class=\"n\">widget</span><span class=\"o\">=</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">SelectDateWidget</span><span class=\"p\">(</span><span class=\"n\">years</span><span class=\"o\">=</span><span class=\"n\">BIRTH_YEAR_CHOICES</span><span class=\"p\">)</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">favorite_colors</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">MultipleChoiceField</span><span class=\"p\">(</span>\n        <span class=\"n\">required</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"n\">widget</span><span class=\"o\">=</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CheckboxSelectMultiple</span><span class=\"p\">,</span>\n        <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">FAVORITE_COLORS_CHOICES</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n<p>Consultez les <a class=\"reference internal\" href=\"#built-in-widgets\"><span class=\"std std-ref\">composants de formulaires intégrés</span></a> pour plus d’informations sur les composants disponibles et les paramètres acceptés.</p>\n</section>\n<section id=\"customizing-widget-instances\">\n<h2>Personnalisation des instances de composants<a class=\"heading-anchor\" href=\"#customizing-widget-instances\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Lorsque Django affiche un composant en HTML, le balisage est minimal - Django n’ajoute ni nom de classe, ni d’autres attributs spécifiques au composant. Cela signifie que par exemple tous les composants <a class=\"reference internal\" href=\"#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextInput</span></code></a> ont la même apparence sur les pages web.</p>\n<p>Il y a deux manières de personnaliser des composants : <a class=\"reference internal\" href=\"#styling-widget-instances\"><span class=\"std std-ref\">par instance de composant</span></a> et <a class=\"reference internal\" href=\"#styling-widget-classes\"><span class=\"std std-ref\">par classe de composant</span></a>.</p>\n<section id=\"styling-widget-instances\">\n<span id=\"id1\"></span><h3>Ajout de styles aux instances de composants<a class=\"heading-anchor\" href=\"#styling-widget-instances\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Si vous souhaitez qu’une instance de composant apparaisse différemment d’une autre instance, il sera nécessaire d’indiquer des attributs supplémentaires au moment où l’objet composant est instancié et qu’il est attribué à un champ de formulaire (ce qui n’empêche pas d’ajouter aussi certaines règles dans vos fichiers CSS).</p>\n<p>Par exemple, en prenant l’exemple de ce 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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CommentForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">()</span>\n    <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">()</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Ce formulaire va inclure des composants <a class=\"reference internal\" href=\"#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextInput</span></code></a> pour les champs <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">comment</span></code> ainsi qu’un composant <a class=\"reference internal\" href=\"#django.forms.URLInput\" title=\"django.forms.URLInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">URLInput</span></code></a> pour le champ <code class=\"docutils literal notranslate\"><span class=\"pre\">url</span></code>. Leur rendu par défaut est utilisé, pas de classe CSS ni attribut supplémentaire :</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">CommentForm</span><span class=\"p\">(</span><span class=\"n\">auto_id</span><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><span class=\"n\">f</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;div&gt;Name:&lt;input type=&quot;text&quot; name=&quot;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; 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>Sur une page web réelle, il est souvent souhaitable d’adapter cet affichage. Le champ commentaire pourrait nécessiter une plus grande zone de saisie, et le composant <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> pourrait être complété par une classe CSS spécifique. Il est aussi possible de définir l’attribut <code class=\"docutils literal notranslate\"><span class=\"pre\">type</span></code> pour utiliser un autre type composant HTML5. Pour cela, utilisez le paramètre <a class=\"reference internal\" href=\"#django.forms.Widget.attrs\" title=\"django.forms.Widget.attrs\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Widget.attrs</span></code></a> lors de la création 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><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CommentForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">widget</span><span class=\"o\">=</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">TextInput</span><span class=\"p\">(</span><span class=\"n\">attrs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;class&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;special&quot;</span><span class=\"p\">}))</span>\n    <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">()</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">widget</span><span class=\"o\">=</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">TextInput</span><span class=\"p\">(</span><span class=\"n\">attrs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;size&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;40&quot;</span><span class=\"p\">}))</span>\n</code></pre></div>\n<p>Vous pouvez aussi modifier un composant dans la définition 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=\"w\"> </span><span class=\"nc\">CommentForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">()</span>\n    <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">()</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">()</span>\n\n    <span class=\"n\">name</span><span class=\"o\">.</span><span class=\"n\">widget</span><span class=\"o\">.</span><span class=\"n\">attrs</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">({</span><span class=\"s2\">&quot;class&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;special&quot;</span><span class=\"p\">})</span>\n    <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">widget</span><span class=\"o\">.</span><span class=\"n\">attrs</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">size</span><span class=\"o\">=</span><span class=\"s2\">&quot;40&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Ou si le champ n’est pas directement déclaré dans le formulaire (comme pour les champs de formulaires de modèles), vous pouvez utiliser l’attribut <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/api/#django.forms.Form.fields\" title=\"django.forms.Form.fields\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Form.fields</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CommentForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">ModelForm</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><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><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">fields</span><span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">widget</span><span class=\"o\">.</span><span class=\"n\">attrs</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">({</span><span class=\"s2\">&quot;class&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;special&quot;</span><span class=\"p\">})</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">fields</span><span class=\"p\">[</span><span class=\"s2\">&quot;comment&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">widget</span><span class=\"o\">.</span><span class=\"n\">attrs</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">size</span><span class=\"o\">=</span><span class=\"s2\">&quot;40&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Django se chargera ensuite d’inclure les attributs supplémentaires dans le résultat affiché :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">CommentForm</span><span class=\"p\">(</span><span class=\"n\">auto_id</span><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><span class=\"n\">f</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;div&gt;Name:&lt;input type=&quot;text&quot; name=&quot;name&quot; class=&quot;special&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; required&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;Comment:&lt;input type=&quot;text&quot; name=&quot;comment&quot; size=&quot;40&quot; required&gt;&lt;/div&gt;</span>\n</code></pre></div>\n<p>Vous pouvez également définir l’attribut HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> à l’aide de <a class=\"reference internal\" href=\"#django.forms.Widget.attrs\" title=\"django.forms.Widget.attrs\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">attrs</span></code></a>. Voir <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/api/#django.forms.BoundField.id_for_label\" title=\"django.forms.BoundField.id_for_label\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">BoundField.id_for_label</span></code></a> pour un exemple.</p>\n</section>\n<section id=\"styling-widget-classes\">\n<span id=\"id2\"></span><h3>Ajout de styles aux classes de composants<a class=\"heading-anchor\" href=\"#styling-widget-classes\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Avec les composants, il est possible d’adjoindre des ressources (<code class=\"docutils literal notranslate\"><span class=\"pre\">css</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">javascript</span></code>) et de personnaliser plus encore leur apparence et leur comportement.</p>\n<p>Rapidement dit, il est nécessaire de créer une sous-classe du composant et de soit <a class=\"reference internal\" href=\"/fr/6.0/topics/forms/media/#assets-as-a-static-definition\"><span class=\"std std-ref\">définir une classe internet « Media »</span></a> ou de <a class=\"reference internal\" href=\"/fr/6.0/topics/forms/media/#dynamic-property\"><span class=\"std std-ref\">créer une propriété « media »</span></a>.</p>\n<p>Ces méthodes impliquent une utilisation relativement avancée de la programmation Python et sont décrites en détails dans le guide thématique des <a class=\"reference internal\" href=\"/fr/6.0/topics/forms/media/\"><span class=\"doc\">fichiers annexes de formulaires</span></a>.</p>\n</section>\n</section>\n<section id=\"base-widget-classes\">\n<span id=\"id3\"></span><h2>Classes <code class=\"docutils literal notranslate\"><span class=\"pre\">Widget</span></code> de base<a class=\"heading-anchor\" href=\"#base-widget-classes\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Les classes basiques de composants <a class=\"reference internal\" href=\"#django.forms.Widget\" title=\"django.forms.Widget\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Widget</span></code></a> et <a class=\"reference internal\" href=\"#django.forms.MultiWidget\" title=\"django.forms.MultiWidget\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MultiWidget</span></code></a> sont héritées par tous les <a class=\"reference internal\" href=\"#built-in-widgets\"><span class=\"std std-ref\">composants intégrés</span></a> et peuvent servir de fondement pour des composants personnalisés.</p>\n<section id=\"widget\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">Widget</span></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 class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Widget\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Widget</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">attrs</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Widget\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Cette classe abstraite ne peut pas être affichée telle quelle, mais elle fournit l’attribut de base <a class=\"reference internal\" href=\"#django.forms.Widget.attrs\" title=\"django.forms.Widget.attrs\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">attrs</span></code></a>. Vous pouvez aussi implémenter ou surcharger la méthode <a class=\"reference internal\" href=\"#django.forms.Widget.render\" title=\"django.forms.Widget.render\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">render()</span></code></a> dans des composants personnalisés.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Widget.attrs\">\n<span class=\"sig-name descname\"><span class=\"pre\">attrs</span></span><a class=\"heading-anchor\" href=\"#django.forms.Widget.attrs\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Un dictionnaire contenant les attributs HTML à définir pour le composant affiché.</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">TextInput</span><span class=\"p\">(</span><span class=\"n\">attrs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;size&quot;</span><span class=\"p\">:</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"s2\">&quot;title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Your name&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">name</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;A name&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;&lt;input title=&quot;Your name&quot; type=&quot;text&quot; name=&quot;name&quot; value=&quot;A name&quot; size=&quot;10&quot;&gt;&#39;</span>\n</code></pre></div>\n<p>Si vous attribuez une valeur <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> ou <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> à un attribut, il sera généré comme un attribut HTML5 booléen :</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">TextInput</span><span class=\"p\">(</span><span class=\"n\">attrs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;required&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">name</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;A name&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;&lt;input name=&quot;name&quot; type=&quot;text&quot; value=&quot;A name&quot; required&gt;&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">TextInput</span><span class=\"p\">(</span><span class=\"n\">attrs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;required&quot;</span><span class=\"p\">:</span> <span class=\"kc\">False</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">name</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;A name&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;&lt;input name=&quot;name&quot; type=&quot;text&quot; value=&quot;A name&quot;&gt;&#39;</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Widget.supports_microseconds\">\n<span class=\"sig-name descname\"><span class=\"pre\">supports_microseconds</span></span><a class=\"heading-anchor\" href=\"#django.forms.Widget.supports_microseconds\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Un attribut qui vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> par défaut. Si la valeur est <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, les microsecondes faisant partie des valeurs <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(disponible dans Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a> et <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.time\" title=\"(disponible dans Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">time</span></code></a> sont mises à <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Widget.format_value\">\n<span class=\"sig-name descname\"><span class=\"pre\">format_value</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Widget.format_value\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Nettoie et renvoie une valeur à utiliser dans le gabarit du composant. <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> n’est pas certain de constituer une saisie valide, il faut donc que les implémentations des sous-classes programment défensivement.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Widget.get_context\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_context</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">attrs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Widget.get_context\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie un dictionnaire de valeurs à utiliser lors du rendu des gabarits de composants. Par défaut, le dictionnaire contient une seule clé, <code class=\"docutils literal notranslate\"><span class=\"pre\">'widget'</span></code>, qui représente le composant dans un dictionnaire contenant les clés suivantes :</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'name'</span></code>: le nom du champ en fonction du paramètre <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'is_hidden'</span></code>: une valeur booléenne indiquant si ce composant est masqué.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'required'</span></code>: une valeur booléenne indiquant si le champ de ce composant est obligatoire.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'value'</span></code>: la valeur telle que renvoyée par <a class=\"reference internal\" href=\"#django.forms.Widget.format_value\" title=\"django.forms.Widget.format_value\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">format_value()</span></code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'attrs'</span></code>: les attributs HTML à définir sur le composant final. Combinaison de l’attribut <a class=\"reference internal\" href=\"#django.forms.Widget.attrs\" title=\"django.forms.Widget.attrs\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">attrs</span></code></a> et du paramètre <code class=\"docutils literal notranslate\"><span class=\"pre\">attrs</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'template_name'</span></code>: la valeur de <code class=\"docutils literal notranslate\"><span class=\"pre\">self.template_name</span></code>.</p></li>\n</ul>\n<p>Les sous-classes de <code class=\"docutils literal notranslate\"><span class=\"pre\">Widget</span></code> peuvent fournir des valeurs de contexte personnalisées en surchargeant cette méthode.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Widget.id_for_label\">\n<span class=\"sig-name descname\"><span class=\"pre\">id_for_label</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">id_</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Widget.id_for_label\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie l’attribut HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> de ce composant à l’usage de la balise <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code>, en fonction de l’attribut <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> du champ. Renvoie une chaîne vide si <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> n’est pas disponible.</p>\n<p>Ce point d’entrée est nécessaire car certains composants possèdent plusieurs éléments HTML et donc plusieurs <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code>. Dans ce cas, cette méthode doit renvoyer une valeur <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> qui correspond au premier <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> dans les balises du composant.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Widget.render\">\n<span class=\"sig-name descname\"><span class=\"pre\">render</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">attrs</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">renderer</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Widget.render\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Produit un composant en HTML en utilisant le moteur de rendu donné. Si <code class=\"docutils literal notranslate\"><span class=\"pre\">renderer</span></code> vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>, le moteur de rendu du réglage <a class=\"reference internal\" href=\"/fr/6.0/ref/settings/#std-setting-FORM_RENDERER\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FORM_RENDERER</span></code></a> est utilisé.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Widget.value_from_datadict\">\n<span class=\"sig-name descname\"><span class=\"pre\">value_from_datadict</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">data</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">files</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Widget.value_from_datadict\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Étant donné un dictionnaire de données et le nom de ce composant, renvoie la valeur du composant. <code class=\"docutils literal notranslate\"><span class=\"pre\">files</span></code> peut contenir des données provenant de <a class=\"reference internal\" href=\"/fr/6.0/ref/request-response/#django.http.HttpRequest.FILES\" title=\"django.http.HttpRequest.FILES\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">request.FILES</span></code></a>. Renvoie <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> si aucune valeur n’est disponible. Notez également que <code class=\"docutils literal notranslate\"><span class=\"pre\">value_from_datadict</span></code> peut être appelée plus d’une fois pendant le traitement des données de formulaire, ce qui signifie que si vous la personnalisez en ajoutant du traitement lourd, vous devriez implémenter vous-même un mécanisme de cache.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Widget.value_omitted_from_data\">\n<span class=\"sig-name descname\"><span class=\"pre\">value_omitted_from_data</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">data</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">files</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Widget.value_omitted_from_data\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Étant donné les dictionnaires <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">files</span></code> ainsi que le nom de ce composant, indique s’il existe des données ou des fichiers pour le composant.</p>\n<p>Le résultat de cette méthode détermine si un champ d’un formulaire de modèle <a class=\"reference internal\" href=\"/fr/6.0/topics/forms/modelforms/#topics-modelform-save\"><span class=\"std std-ref\">prend sa valeur par défaut</span></a>.</p>\n<p>Les composants <a class=\"reference internal\" href=\"#django.forms.CheckboxInput\" title=\"django.forms.CheckboxInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CheckboxInput</span></code></a>, <a class=\"reference internal\" href=\"#django.forms.CheckboxSelectMultiple\" title=\"django.forms.CheckboxSelectMultiple\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CheckboxSelectMultiple</span></code></a> et <a class=\"reference internal\" href=\"#django.forms.SelectMultiple\" title=\"django.forms.SelectMultiple\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SelectMultiple</span></code></a> sont des cas particuliers où la méthode renvoie toujours <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> car une case à cocher non cochée ou un <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;select</span> <span class=\"pre\">multiple&gt;</span></code> sans sélection n’apparassent pas dans les données soumises par le formulaire HTML, ce qui fait qu’il est impossible de savoir si un utilisateur a saisi une valeur ou non.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Widget.use_fieldset\">\n<span class=\"sig-name descname\"><span class=\"pre\">use_fieldset</span></span><a class=\"heading-anchor\" href=\"#django.forms.Widget.use_fieldset\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Un attribut pour savoir si le composant doit être contenu dans un <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;fieldset&gt;</span></code> avec une balise <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;legend&gt;</span></code> lorsqu’il est produit. Vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> par défaut, mais <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> lorsque le composant contient plusieurs balises <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code>, tels que pour les composants <a class=\"reference internal\" href=\"#django.forms.CheckboxSelectMultiple\" title=\"django.forms.CheckboxSelectMultiple\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CheckboxSelectMultiple</span></code></a>, <a class=\"reference internal\" href=\"#django.forms.RadioSelect\" title=\"django.forms.RadioSelect\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RadioSelect</span></code></a>, <a class=\"reference internal\" href=\"#django.forms.MultiWidget\" title=\"django.forms.MultiWidget\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MultiWidget</span></code></a>, <a class=\"reference internal\" href=\"#django.forms.SplitDateTimeWidget\" title=\"django.forms.SplitDateTimeWidget\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SplitDateTimeWidget</span></code></a> et <a class=\"reference internal\" href=\"#django.forms.SelectDateWidget\" title=\"django.forms.SelectDateWidget\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SelectDateWidget</span></code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Widget.use_required_attribute\">\n<span class=\"sig-name descname\"><span class=\"pre\">use_required_attribute</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">initial</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Widget.use_required_attribute\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Étant donné une valeur <code class=\"docutils literal notranslate\"><span class=\"pre\">initial</span></code> d’un champ de formulaire, renvoie si oui ou non le rendu du composant doit comporter l’attribut HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">required</span></code>. Les formulaires utilisent cette méthode en compagnie de <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/fields/#django.forms.Field.required\" title=\"django.forms.Field.required\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Field.required</span></code></a> et de <a class=\"reference internal\" href=\"/fr/6.0/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\"><span class=\"pre\">Form.use_required_attribute</span></code></a> pour déterminer s’ils doivent afficher l’attribut <code class=\"docutils literal notranslate\"><span class=\"pre\">required</span></code> pour chacun de leurs champs.</p>\n<p>Renvoie <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> par défaut pour les composants masqués, sinon <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>. Il y a des cas particuliers : <a class=\"reference internal\" href=\"#django.forms.FileInput\" title=\"django.forms.FileInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileInput</span></code></a>  et <a class=\"reference internal\" href=\"#django.forms.ClearableFileInput\" title=\"django.forms.ClearableFileInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ClearableFileInput</span></code></a> renvoient <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> lorsque <code class=\"docutils literal notranslate\"><span class=\"pre\">initial</span></code> est défini et <a class=\"reference internal\" href=\"#django.forms.CheckboxSelectMultiple\" title=\"django.forms.CheckboxSelectMultiple\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CheckboxSelectMultiple</span></code></a> renvoie toujours <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> car la validation des navigateurs exigerait que toutes les cases soient cochées au lieu de simplement une seule.</p>\n<p>Override this method in custom widgets that aren’t compatible with\nbrowser validation. For example, a WYSIWYG text editor widget backed by\na hidden <code class=\"docutils literal notranslate\"><span class=\"pre\">textarea</span></code> element may want to always return <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> to\navoid browser validation on the hidden field.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"multiwidget\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">MultiWidget</span></code><a class=\"heading-anchor\" href=\"#multiwidget\"><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.MultiWidget\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">MultiWidget</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">widgets</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">attrs</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.MultiWidget\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Un composant formé de plusieurs composants. <a class=\"reference internal\" href=\"#django.forms.MultiWidget\" title=\"django.forms.MultiWidget\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MultiWidget</span></code></a> fonctionne de concert avec le champ <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/fields/#django.forms.MultiValueField\" title=\"django.forms.MultiValueField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MultiValueField</span></code></a>.</p>\n<p><a class=\"reference internal\" href=\"#django.forms.MultiWidget\" title=\"django.forms.MultiWidget\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MultiWidget</span></code></a> requiert un paramètre :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.MultiWidget.widgets\">\n<span class=\"sig-name descname\"><span class=\"pre\">widgets</span></span><a class=\"heading-anchor\" href=\"#django.forms.MultiWidget.widgets\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Un objet itérable contenant les composants nécessaires. 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=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">MultiWidget</span><span class=\"p\">,</span> <span class=\"n\">TextInput</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">widget</span> <span class=\"o\">=</span> <span class=\"n\">MultiWidget</span><span class=\"p\">(</span><span class=\"n\">widgets</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">TextInput</span><span class=\"p\">,</span> <span class=\"n\">TextInput</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">widget</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"s2\">&quot;john&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;paul&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">&#39;&lt;input type=&quot;text&quot; name=&quot;name_0&quot; value=&quot;john&quot;&gt;&lt;input type=&quot;text&quot; name=&quot;name_1&quot; value=&quot;paul&quot;&gt;&#39;</span>\n</code></pre></div>\n<p>Vous pouvez fournir un dictionnaire afin d’indiquer des suffixes personnalisés pour l’attribut <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> de chaque sous-composant. Dans ce cas, pour chaque paire <code class=\"docutils literal notranslate\"><span class=\"pre\">(clé,</span> <span class=\"pre\">composant)</span></code>, la clé sera ajoutée au nom <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> du composant pour générer la valeur de l’attribut. Il est possible d’indiquer une seule clé avec une chaîne vide (<code class=\"docutils literal notranslate\"><span class=\"pre\">''</span></code>) pour demander la suppression du suffixe d’un des composants. 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=\"n\">widget</span> <span class=\"o\">=</span> <span class=\"n\">MultiWidget</span><span class=\"p\">(</span><span class=\"n\">widgets</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">:</span> <span class=\"n\">TextInput</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last&quot;</span><span class=\"p\">:</span> <span class=\"n\">TextInput</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">widget</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"s2\">&quot;john&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;paul&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">&#39;&lt;input type=&quot;text&quot; name=&quot;name&quot; value=&quot;john&quot;&gt;&lt;input type=&quot;text&quot; name=&quot;name_last&quot; value=&quot;paul&quot;&gt;&#39;</span>\n</code></pre></div>\n</dd></dl>\n\n<p>Ainsi qu’une méthode obligatoire :</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.MultiWidget.decompress\">\n<span class=\"sig-name descname\"><span class=\"pre\">decompress</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.MultiWidget.decompress\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Cette méthode accepte une seule valeur « compressée » à partir du champ et renvoie une liste de valeurs « décompressées ». La valeur d’entrée peut être considérée comme valide, mais pourrait être vide.</p>\n<p>Cette méthode <strong>doit être implémentée</strong> par la sous-classe, et comme la valeur peut être vide, l’implémentation doit être défensive.</p>\n<p>La logique de la « décompression » est qu’il est nécessaire de « scinder » la valeur combinée du champ de formulaire en valeurs distinctes pour chaque composant.</p>\n<p>Un exemple pour illustrer ce processus est la façon dont <a class=\"reference internal\" href=\"#django.forms.SplitDateTimeWidget\" title=\"django.forms.SplitDateTimeWidget\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SplitDateTimeWidget</span></code></a> transforme une valeur <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(disponible dans Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a> en une liste où la date et l’heure sont séparées :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">MultiWidget</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">SplitDateTimeWidget</span><span class=\"p\">(</span><span class=\"n\">MultiWidget</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">decompress</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">value</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"n\">value</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">(),</span> <span class=\"n\">value</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">()]</span>\n        <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">]</span>\n</code></pre></div>\n<aside class=\"admonition admonition-tip\">\n<p class=\"admonition-title\">Astuce</p>\n<p>Notez que <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/fields/#django.forms.MultiValueField\" title=\"django.forms.MultiValueField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MultiValueField</span></code></a> possède une méthode complémentaire <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/fields/#django.forms.MultiValueField.compress\" title=\"django.forms.MultiValueField.compress\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">compress()</span></code></a> qui joue le rôle inverse, combiner les valeurs nettoyées de tous les sous-composants en une seule valeur.</p>\n</aside>\n</dd></dl>\n\n<p>Il fournit un contenu de contexte spécifique :</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.MultiWidget.get_context\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_context</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">attrs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.MultiWidget.get_context\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En plus de la clé <code class=\"docutils literal notranslate\"><span class=\"pre\">'widget'</span></code> décrite dans <a class=\"reference internal\" href=\"#django.forms.Widget.get_context\" title=\"django.forms.Widget.get_context\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Widget.get_context()</span></code></a>, <code class=\"docutils literal notranslate\"><span class=\"pre\">MultiWidget</span></code> ajoute une clé <code class=\"docutils literal notranslate\"><span class=\"pre\">widget['subwidgets']</span></code>.</p>\n<p>Il est possible d’effectuer cette boucle dans le gabarit du composant :</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">subwidget</span> <span class=\"k\">in</span> <span class=\"nv\">widget.subwidgets</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">include</span> <span class=\"nv\">subwidget.template_name</span> <span class=\"k\">with</span> <span class=\"nv\">widget</span><span class=\"o\">=</span><span class=\"nv\">subwidget</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</dd></dl>\n\n<p>Voici un exemple de composant héritant de <a class=\"reference internal\" href=\"#django.forms.MultiWidget\" title=\"django.forms.MultiWidget\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MultiWidget</span></code></a> qui affiche une date avec le jour, le mois et l’année dans des listes déroulantes différentes. Ce composant est prévu pour être utilisé avec un champ <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/fields/#django.forms.DateField\" title=\"django.forms.DateField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateField</span></code></a> plutôt qu’avec un <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/fields/#django.forms.MultiValueField\" title=\"django.forms.MultiValueField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MultiValueField</span></code></a>, c’est pourquoi nous avons implémenté <a class=\"reference internal\" href=\"#django.forms.Widget.value_from_datadict\" title=\"django.forms.Widget.value_from_datadict\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">value_from_datadict()</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">datetime</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">date</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">DateSelectorWidget</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">MultiWidget</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">attrs</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">days</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">day</span><span class=\"p\">:</span> <span class=\"n\">day</span> <span class=\"k\">for</span> <span class=\"n\">day</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">32</span><span class=\"p\">)}</span>\n        <span class=\"n\">months</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">month</span><span class=\"p\">:</span> <span class=\"n\">month</span> <span class=\"k\">for</span> <span class=\"n\">month</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">13</span><span class=\"p\">)}</span>\n        <span class=\"n\">years</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">year</span><span class=\"p\">:</span> <span class=\"n\">year</span> <span class=\"k\">for</span> <span class=\"n\">year</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"mi\">2018</span><span class=\"p\">,</span> <span class=\"mi\">2019</span><span class=\"p\">,</span> <span class=\"mi\">2020</span><span class=\"p\">]}</span>\n        <span class=\"n\">widgets</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Select</span><span class=\"p\">(</span><span class=\"n\">attrs</span><span class=\"o\">=</span><span class=\"n\">attrs</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">days</span><span class=\"p\">),</span>\n            <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Select</span><span class=\"p\">(</span><span class=\"n\">attrs</span><span class=\"o\">=</span><span class=\"n\">attrs</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">months</span><span class=\"p\">),</span>\n            <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Select</span><span class=\"p\">(</span><span class=\"n\">attrs</span><span class=\"o\">=</span><span class=\"n\">attrs</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">years</span><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><span class=\"n\">widgets</span><span class=\"p\">,</span> <span class=\"n\">attrs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">decompress</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">value</span><span class=\"p\">,</span> <span class=\"n\">date</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"n\">value</span><span class=\"o\">.</span><span class=\"n\">day</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"o\">.</span><span class=\"n\">month</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"o\">.</span><span class=\"n\">year</span><span class=\"p\">]</span>\n        <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">value</span><span class=\"p\">,</span> <span class=\"nb\">str</span><span class=\"p\">):</span>\n            <span class=\"n\">year</span><span class=\"p\">,</span> <span class=\"n\">month</span><span class=\"p\">,</span> <span class=\"n\">day</span> <span class=\"o\">=</span> <span class=\"n\">value</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;-&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"n\">day</span><span class=\"p\">,</span> <span class=\"n\">month</span><span class=\"p\">,</span> <span class=\"n\">year</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">value_from_datadict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">files</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">):</span>\n        <span class=\"n\">day</span><span class=\"p\">,</span> <span class=\"n\">month</span><span class=\"p\">,</span> <span class=\"n\">year</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">value_from_datadict</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">files</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">)</span>\n        <span class=\"c1\"># DateField expects a single string that it can parse into a date.</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;</span><span class=\"si\">{}</span><span class=\"s2\">-</span><span class=\"si\">{}</span><span class=\"s2\">-</span><span class=\"si\">{}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">year</span><span class=\"p\">,</span> <span class=\"n\">month</span><span class=\"p\">,</span> <span class=\"n\">day</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Le constructeur crée plusieurs composants <a class=\"reference internal\" href=\"#django.forms.Select\" title=\"django.forms.Select\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Select</span></code></a> dans une liste. La méthode <code class=\"docutils literal notranslate\"><span class=\"pre\">super()</span></code> utilise cette liste pour configurer le composant.</p>\n<p>La méthode obligatoire <a class=\"reference internal\" href=\"#django.forms.MultiWidget.decompress\" title=\"django.forms.MultiWidget.decompress\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">decompress()</span></code></a> partage une valeur <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime.date</span></code> en valeurs distinctes de jour, mois et année correspondant à chaque composant. Si une date non valable a été choisie, comme par exemple un 30 février, <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/fields/#django.forms.DateField\" title=\"django.forms.DateField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateField</span></code></a> passe alors une chaîne à cette méthode qui doit l’analyser. Le <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> final gère le cas de la valeur <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>, qui signifie que nous n’avons aucune valeur par défaut pour nos sous-composants.</p>\n<p>Lîmplémentation par défaut de <a class=\"reference internal\" href=\"#django.forms.Widget.value_from_datadict\" title=\"django.forms.Widget.value_from_datadict\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">value_from_datadict()</span></code></a> renvoie une liste de valeurs correspondant à chaque <code class=\"docutils literal notranslate\"><span class=\"pre\">Widget</span></code>. C’est le comportement correct lorsqu’un composant <code class=\"docutils literal notranslate\"><span class=\"pre\">MultiWidget</span></code> est utilisé de concert avec un champ <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/fields/#django.forms.MultiValueField\" title=\"django.forms.MultiValueField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MultiValueField</span></code></a>. Mais comme nous voulons utiliser ce composant avec un champ <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/fields/#django.forms.DateField\" title=\"django.forms.DateField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateField</span></code></a>, qui n’accepte qu’une seule valeur, nous avons surchargé cette méthode. L’implémentation ici combine les données des sous-composants en une chaîne mise en forme selon l’attente de <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/fields/#django.forms.DateField\" title=\"django.forms.DateField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateField</span></code></a>.</p>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"built-in-widgets\">\n<span id=\"id4\"></span><h2>Composants intégrés<a class=\"heading-anchor\" href=\"#built-in-widgets\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Dans son module <code class=\"docutils literal notranslate\"><span class=\"pre\">django.forms.widgets</span></code>, Django fournit une représentation de tous les composants HTML de base, plus certains groupes de composants fréquemment utilisés, y compris la <a class=\"reference internal\" href=\"#text-widgets\"><span class=\"std std-ref\">saisie de texte</span></a>, <a class=\"reference internal\" href=\"#selector-widgets\"><span class=\"std std-ref\">diverses cases à cocher et listes à choix</span></a>, l’<a class=\"reference internal\" href=\"#file-upload-widgets\"><span class=\"std std-ref\">envoi de fichiers</span></a> et le <a class=\"reference internal\" href=\"#composite-widgets\"><span class=\"std std-ref\">traitement de saisies à plusieurs valeurs</span></a>.</p>\n<section id=\"widgets-handling-input-of-text\">\n<span id=\"text-widgets\"></span><h3>Composants chargés de la saisie de texte<a class=\"heading-anchor\" href=\"#widgets-handling-input-of-text\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ces composants font usage des éléments HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">input</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">textarea</span></code>.</p>\n<section id=\"textinput\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">TextInput</span></code><a class=\"heading-anchor\" href=\"#textinput\"><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.TextInput\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">TextInput</span></span><a class=\"heading-anchor\" href=\"#django.forms.TextInput\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">input_type</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'text'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/text.html'</span></code></p></li>\n<li><p>Produit : <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;text&quot;</span> <span class=\"pre\">...&gt;</span></code></p></li>\n</ul>\n</dd></dl>\n\n</section>\n<section id=\"numberinput\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">NumberInput</span></code><a class=\"heading-anchor\" href=\"#numberinput\"><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.NumberInput\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">NumberInput</span></span><a class=\"heading-anchor\" href=\"#django.forms.NumberInput\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">input_type</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'number'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/number.html'</span></code></p></li>\n<li><p>Produit : <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;number&quot;</span> <span class=\"pre\">...&gt;</span></code></p></li>\n</ul>\n<p>Il faut savoir que certains navigateurs ne gèrent pas correctement la saisie de nombres régionalisés dans les types de zones <code class=\"docutils literal notranslate\"><span class=\"pre\">number</span></code>. Django lui-même évite de les utiliser pour les champs dont la propriété <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/fields/#django.forms.Field.localize\" title=\"django.forms.Field.localize\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">localize</span></code></a> est <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n</dd></dl>\n\n</section>\n<section id=\"emailinput\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">EmailInput</span></code><a class=\"heading-anchor\" href=\"#emailinput\"><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.EmailInput\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">EmailInput</span></span><a class=\"heading-anchor\" href=\"#django.forms.EmailInput\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">input_type</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'email'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/email.html'</span></code></p></li>\n<li><p>Produit : <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;email&quot;</span> <span class=\"pre\">...&gt;</span></code></p></li>\n</ul>\n</dd></dl>\n\n</section>\n<section id=\"urlinput\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">URLInput</span></code><a class=\"heading-anchor\" href=\"#urlinput\"><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.URLInput\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">URLInput</span></span><a class=\"heading-anchor\" href=\"#django.forms.URLInput\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">input_type</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'url'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/url.html'</span></code></p></li>\n<li><p>Produit : <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;url&quot;</span> <span class=\"pre\">...&gt;</span></code></p></li>\n</ul>\n</dd></dl>\n\n</section>\n<section id=\"colorinput\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">ColorInput</span></code><a class=\"heading-anchor\" href=\"#colorinput\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<aside class=\"version-note version-added\" data-version=\"5.2\">\n<p class=\"version-note-title\">New in Django 5.2</p></aside>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ColorInput\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">ColorInput</span></span><a class=\"heading-anchor\" href=\"#django.forms.ColorInput\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">input_type</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'color'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>:<code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/color.html'</span></code></p></li>\n<li><p>Produit : <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;color&quot;</span> <span class=\"pre\">...&gt;</span></code></p></li>\n</ul>\n</dd></dl>\n\n</section>\n<section id=\"searchinput\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">SearchInput</span></code><a class=\"heading-anchor\" href=\"#searchinput\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<aside class=\"version-note version-added\" data-version=\"5.2\">\n<p class=\"version-note-title\">New in Django 5.2</p></aside>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.SearchInput\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">SearchInput</span></span><a class=\"heading-anchor\" href=\"#django.forms.SearchInput\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">input_type</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'search'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/search.html'</span></code></p></li>\n<li><p>Produit : <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;search&quot;</span> <span class=\"pre\">...&gt;</span></code></p></li>\n</ul>\n</dd></dl>\n\n</section>\n<section id=\"telinput\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">TelInput</span></code><a class=\"heading-anchor\" href=\"#telinput\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<aside class=\"version-note version-added\" data-version=\"5.2\">\n<p class=\"version-note-title\">New in Django 5.2</p></aside>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.TelInput\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">TelInput</span></span><a class=\"heading-anchor\" href=\"#django.forms.TelInput\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">input_type</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'tel'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/tel.html'</span></code></p></li>\n<li><p>Produit : <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;tel&quot;</span> <span class=\"pre\">...&gt;</span></code></p></li>\n</ul>\n<p>Les navigateurs n’effectuent aucune vérification côté client par défaut car les formats de numéros de téléphone varient énormément de par le monde. Vous pouvez en ajouter vous-même en définissant <code class=\"docutils literal notranslate\"><span class=\"pre\">pattern</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">minlength</span></code> ou <code class=\"docutils literal notranslate\"><span class=\"pre\">maxlength</span></code> dans l’argument <a class=\"reference internal\" href=\"#django.forms.Widget.attrs\" title=\"django.forms.Widget.attrs\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Widget.attrs</span></code></a>.</p>\n<p>De plus, vous pouvez ajouter de la validation côté serveur à votre champ de formulaire avec un validateur du type <a class=\"reference internal\" href=\"/fr/6.0/ref/validators/#django.core.validators.RegexValidator\" title=\"django.core.validators.RegexValidator\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RegexValidator</span></code></a> ou par des paquets tiers, tels que <a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/django-phonenumber-field/\">django-phonenumber-field</a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"passwordinput\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">PasswordInput</span></code><a class=\"heading-anchor\" href=\"#passwordinput\"><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.PasswordInput\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">PasswordInput</span></span><a class=\"heading-anchor\" href=\"#django.forms.PasswordInput\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">input_type</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'password'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/password.html'</span></code></p></li>\n<li><p>Produit : <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;password&quot;</span> <span class=\"pre\">...&gt;</span></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.PasswordInput.render_value\">\n<span class=\"sig-name descname\"><span class=\"pre\">render_value</span></span><a class=\"heading-anchor\" href=\"#django.forms.PasswordInput.render_value\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Détermine si le composant contient une valeur lorsque le formulaire est réaffiché après une erreur de validation (la valeur par défaut est <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>).</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"hiddeninput\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">HiddenInput</span></code><a class=\"heading-anchor\" href=\"#hiddeninput\"><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.HiddenInput\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">HiddenInput</span></span><a class=\"heading-anchor\" href=\"#django.forms.HiddenInput\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">input_type</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'hidden'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/hidden.html'</span></code></p></li>\n<li><p>Produit : <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;hidden&quot;</span> <span class=\"pre\">...&gt;</span></code></p></li>\n</ul>\n<p>Notez qu’il existe également un composant <a class=\"reference internal\" href=\"#django.forms.MultipleHiddenInput\" title=\"django.forms.MultipleHiddenInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MultipleHiddenInput</span></code></a> qui regroupe un ensemble de zones de saisie masquées.</p>\n</dd></dl>\n\n</section>\n<section id=\"dateinput\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">DateInput</span></code><a class=\"heading-anchor\" href=\"#dateinput\"><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.DateInput\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">DateInput</span></span><a class=\"heading-anchor\" href=\"#django.forms.DateInput\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">input_type</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'text'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/date.html'</span></code></p></li>\n<li><p>Produit : <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;text&quot;</span> <span class=\"pre\">...&gt;</span></code></p></li>\n</ul>\n<p>Accepte les mêmes paramètres que <a class=\"reference internal\" href=\"#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextInput</span></code></a>, avec en plus un paramètre facultatif :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.DateInput.format\">\n<span class=\"sig-name descname\"><span class=\"pre\">format</span></span><a class=\"heading-anchor\" href=\"#django.forms.DateInput.format\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Le format dans lequel la valeur initiale du champ est affichée.</p>\n</dd></dl>\n\n<p>Si aucun paramètre <code class=\"docutils literal notranslate\"><span class=\"pre\">format</span></code> n’est indiqué, le format par défaut est le premier format trouvé dans <a class=\"reference internal\" href=\"/fr/6.0/ref/settings/#std-setting-DATE_INPUT_FORMATS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATE_INPUT_FORMATS</span></code></a> en respectant la <a class=\"reference internal\" href=\"/fr/6.0/topics/i18n/formatting/\"><span class=\"doc\">Régionalisation des formats</span></a>. Les formats %U`, <code class=\"docutils literal notranslate\"><span class=\"pre\">%W</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">%j</span></code> ne sont pas pris en charge par ce composant.</p>\n<aside class=\"admonition-using-the-html5-date-input-type admonition\">\n<p class=\"admonition-title\">Utilisation du type de champ de saisie HTML5 « date »</p>\n<p>Si vous ciblez des navigateurs qui prennent en charge le <a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date\">type de champ de saisie HTML5 « date »</a>, vous pouvez surcharger l’attribut <code class=\"docutils literal notranslate\"><span class=\"pre\">input_type</span></code> pour activer le sélecteur de date natif du navigateur :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyDateInput</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">DateInput</span><span class=\"p\">):</span>\n    <span class=\"n\">input_type</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;date&quot;</span>\n    <span class=\"nb\">format</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s2\">&quot;</span>\n</code></pre></div>\n<p>Ou alors :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">DateInput</span><span class=\"p\">(</span><span class=\"n\">attrs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;type&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;date&quot;</span><span class=\"p\">},</span> <span class=\"nb\">format</span><span class=\"o\">=</span><span class=\"s2\">&quot;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>HTML5 date inputs expect values in the ISO format <code class=\"docutils literal notranslate\"><span class=\"pre\">YYYY-MM-DD</span></code>. If a\ndifferent format is provided, the field may appear empty even when a\nvalue exists. Setting the <code class=\"docutils literal notranslate\"><span class=\"pre\">format</span></code> attribute controls how Django\nprovides the value, but the browser controls how it is displayed.\nHence, the <code class=\"docutils literal notranslate\"><span class=\"pre\">format</span></code> attribute and the <a class=\"reference internal\" href=\"/fr/6.0/ref/settings/#std-setting-DATE_INPUT_FORMATS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATE_INPUT_FORMATS</span></code></a>\nsetting will have no effect on the displayed value.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"datetimeinput\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">DateTimeInput</span></code><a class=\"heading-anchor\" href=\"#datetimeinput\"><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.DateTimeInput\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">DateTimeInput</span></span><a class=\"heading-anchor\" href=\"#django.forms.DateTimeInput\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">input_type</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'text'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/datetime.html'</span></code></p></li>\n<li><p>Produit : <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;text&quot;</span> <span class=\"pre\">...&gt;</span></code></p></li>\n</ul>\n<p>Accepte les mêmes paramètres que <a class=\"reference internal\" href=\"#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextInput</span></code></a>, avec en plus un paramètre facultatif :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.DateTimeInput.format\">\n<span class=\"sig-name descname\"><span class=\"pre\">format</span></span><a class=\"heading-anchor\" href=\"#django.forms.DateTimeInput.format\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Le format dans lequel la valeur initiale du champ est affichée.</p>\n</dd></dl>\n\n<p>Si aucun paramètre <code class=\"docutils literal notranslate\"><span class=\"pre\">format</span></code> n’est indiqué, le format par défaut est le premier format trouvé dans <a class=\"reference internal\" href=\"/fr/6.0/ref/settings/#std-setting-DATETIME_INPUT_FORMATS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATETIME_INPUT_FORMATS</span></code></a> en respectant la <a class=\"reference internal\" href=\"/fr/6.0/topics/i18n/formatting/\"><span class=\"doc\">Régionalisation des formats</span></a>. Les formats %U`, <code class=\"docutils literal notranslate\"><span class=\"pre\">%W</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">%j</span></code> ne sont pas pris en charge par ce composant.</p>\n<p>Par défaut, la partie microsecondes de la valeur de temps est toujours définie à <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code>. Si les microsecondes sont nécessaires, créez une sous-classe avec l’attribut <a class=\"reference internal\" href=\"#django.forms.Widget.supports_microseconds\" title=\"django.forms.Widget.supports_microseconds\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">supports_microseconds</span></code></a> défini à <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n</dd></dl>\n\n</section>\n<section id=\"timeinput\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">TimeInput</span></code><a class=\"heading-anchor\" href=\"#timeinput\"><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.TimeInput\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">TimeInput</span></span><a class=\"heading-anchor\" href=\"#django.forms.TimeInput\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">input_type</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'text'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/time.html'</span></code></p></li>\n<li><p>Produit : <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;text&quot;</span> <span class=\"pre\">...&gt;</span></code></p></li>\n</ul>\n<p>Accepte les mêmes paramètres que <a class=\"reference internal\" href=\"#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextInput</span></code></a>, avec en plus un paramètre facultatif :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.TimeInput.format\">\n<span class=\"sig-name descname\"><span class=\"pre\">format</span></span><a class=\"heading-anchor\" href=\"#django.forms.TimeInput.format\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Le format dans lequel la valeur initiale du champ est affichée.</p>\n</dd></dl>\n\n<p>Si aucun paramètre <code class=\"docutils literal notranslate\"><span class=\"pre\">format</span></code> n’est indiqué, le format par défaut est le premier format trouvé dans <a class=\"reference internal\" href=\"/fr/6.0/ref/settings/#std-setting-TIME_INPUT_FORMATS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TIME_INPUT_FORMATS</span></code></a> en respectant la <a class=\"reference internal\" href=\"/fr/6.0/topics/i18n/formatting/\"><span class=\"doc\">Régionalisation des formats</span></a>.</p>\n<p>Pour le traitement des microsecondes, référez-vous à <a class=\"reference internal\" href=\"#django.forms.DateTimeInput\" title=\"django.forms.DateTimeInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateTimeInput</span></code></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"textarea\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">Textarea</span></code><a class=\"heading-anchor\" href=\"#textarea\"><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.Textarea\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Textarea</span></span><a class=\"heading-anchor\" href=\"#django.forms.Textarea\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/textarea.html'</span></code></p></li>\n<li><p>Produit : <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;textarea&gt;...&lt;/textarea&gt;</span></code></p></li>\n</ul>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"selector-and-checkbox-widgets\">\n<span id=\"selector-widgets\"></span><h3>Composants cases à cocher et listes à choix<a class=\"heading-anchor\" href=\"#selector-and-checkbox-widgets\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ces composants font usage des éléments HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;select&gt;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type='checkbox'&gt;</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type='radio'&gt;</span></code>.</p>\n<p>Les composants qui produisent plusieurs options de choix possèdent un attribut <code class=\"docutils literal notranslate\"><span class=\"pre\">option_template_name</span></code> qui indique le gabarit à utiliser pour produire chaque choix. Par exemple, pour le composant <a class=\"reference internal\" href=\"#django.forms.Select\" title=\"django.forms.Select\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Select</span></code></a>, <code class=\"docutils literal notranslate\"><span class=\"pre\">select_option.html</span></code> produit une <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;option&gt;</span></code> dans un <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;select&gt;</span></code>.</p>\n<section id=\"checkboxinput\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">CheckboxInput</span></code><a class=\"heading-anchor\" href=\"#checkboxinput\"><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.CheckboxInput\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">CheckboxInput</span></span><a class=\"heading-anchor\" href=\"#django.forms.CheckboxInput\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">input_type</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'checkbox'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/checkbox.html'</span></code></p></li>\n<li><p>Produit : <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;checkbox&quot;</span> <span class=\"pre\">...&gt;</span></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.CheckboxInput.check_test\">\n<span class=\"sig-name descname\"><span class=\"pre\">check_test</span></span><a class=\"heading-anchor\" href=\"#django.forms.CheckboxInput.check_test\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Un objet exécutable acceptant la valeur de <code class=\"docutils literal notranslate\"><span class=\"pre\">CheckboxInput</span></code> et renvoyant <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> si la case à cocher doit apparaître cochée pour cette valeur.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"select\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">Select</span></code><a class=\"heading-anchor\" href=\"#select\"><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.Select\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Select</span></span><a class=\"heading-anchor\" href=\"#django.forms.Select\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/select.html'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">option_template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/select_option.html'</span></code></p></li>\n<li><p>Produit : <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;select&gt;&lt;option</span> <span class=\"pre\">...&gt;...&lt;/select&gt;</span></code></p></li>\n</ul>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Select.choices\">\n<span class=\"sig-name descname\"><span class=\"pre\">choices</span></span><a class=\"heading-anchor\" href=\"#django.forms.Select.choices\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Cet attribut est facultatif lorsque le champ de formulaire n’a pas d’attribut <code class=\"docutils literal notranslate\"><span class=\"pre\">choices</span></code>. Si l’attribut de champ est présent, il écrase tout ce que vous pourriez définir ici au moment où l’attribut est mis à jour au niveau du champ <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/fields/#django.forms.Field\" title=\"django.forms.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a>.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"nullbooleanselect\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">NullBooleanSelect</span></code><a class=\"heading-anchor\" href=\"#nullbooleanselect\"><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.NullBooleanSelect\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">NullBooleanSelect</span></span><a class=\"heading-anchor\" href=\"#django.forms.NullBooleanSelect\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/select.html'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">option_template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/select_option.html'</span></code></p></li>\n</ul>\n<p>Composant de liste à choix avec les options « Inconnu », « Oui » et « Non »</p>\n</dd></dl>\n\n</section>\n<section id=\"selectmultiple\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">SelectMultiple</span></code><a class=\"heading-anchor\" href=\"#selectmultiple\"><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.SelectMultiple\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">SelectMultiple</span></span><a class=\"heading-anchor\" href=\"#django.forms.SelectMultiple\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/select.html'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">option_template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/select_option.html'</span></code></p></li>\n</ul>\n<p>Semblable à <a class=\"reference internal\" href=\"#django.forms.Select\" title=\"django.forms.Select\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Select</span></code></a>, mais autorise les sélections multiples : <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;select</span> <span class=\"pre\">multiple&gt;…&lt;/select&gt;</span></code></p>\n</dd></dl>\n\n</section>\n<section id=\"radioselect\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">RadioSelect</span></code><a class=\"heading-anchor\" href=\"#radioselect\"><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.RadioSelect\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">RadioSelect</span></span><a class=\"heading-anchor\" href=\"#django.forms.RadioSelect\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/radio.html'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">option_template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/radio_option.html'</span></code></p></li>\n</ul>\n<p>Semblable à <a class=\"reference internal\" href=\"#django.forms.Select\" title=\"django.forms.Select\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Select</span></code></a>, mais affiché sous forme de liste de boutons radio dans des balises <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;div&gt;</span></code>:</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\">div</span><span class=\"p\">&gt;</span>\n  <span class=\"p\">&lt;</span><span class=\"nt\">div</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">input</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;radio&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;...&quot;</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n  ...\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Pour un contrôle plus fin du balisage produit, vous pouvez passer en boucle les boutons radio dans le gabarit. En prenant comme exemple un formulaire <code class=\"docutils literal notranslate\"><span class=\"pre\">myform</span></code> avec un champ <code class=\"docutils literal notranslate\"><span class=\"pre\">beatles</span></code> utilisant un composant <code class=\"docutils literal notranslate\"><span class=\"pre\">RadioSelect</span></code>:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">fieldset</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">legend</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">myform.beatles.label</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">legend</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">radio</span> <span class=\"k\">in</span> <span class=\"nv\">myform.beatles</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;myradio&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">radio</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">fieldset</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Cela produirait le code HTML suivant :</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\">fieldset</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">legend</span><span class=\"p\">&gt;</span>Radio buttons<span class=\"p\">&lt;/</span><span class=\"nt\">legend</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;myradio&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_beatles_0&quot;</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">input</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_beatles_0&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;beatles&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;radio&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;john&quot;</span> <span class=\"na\">required</span><span class=\"p\">&gt;</span> John<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;myradio&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_beatles_1&quot;</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">input</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_beatles_1&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;beatles&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;radio&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;paul&quot;</span> <span class=\"na\">required</span><span class=\"p\">&gt;</span> Paul<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;myradio&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_beatles_2&quot;</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">input</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_beatles_2&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;beatles&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;radio&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;george&quot;</span> <span class=\"na\">required</span><span class=\"p\">&gt;</span> George<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;myradio&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_beatles_3&quot;</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">input</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_beatles_3&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;beatles&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;radio&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;ringo&quot;</span> <span class=\"na\">required</span><span class=\"p\">&gt;</span> Ringo<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">fieldset</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Les balises <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> y figurent également. Pour un contrôle encore plus fin, vous pouvez utiliser les attributs <code class=\"docutils literal notranslate\"><span class=\"pre\">tag</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">choice_label</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">id_for_label</span></code> de chaque bouton radio. Par exemple, ce gabarit…</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">fieldset</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">legend</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">myform.beatles.label</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">legend</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">radio</span> <span class=\"k\">in</span> <span class=\"nv\">myform.beatles</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">radio.id_for_label</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">radio.choice_label</span> <span class=\"cp\">}}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">span</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;radio&quot;</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">radio.tag</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">span</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">fieldset</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>…produit le code HTML suivant :</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\">fieldset</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">legend</span><span class=\"p\">&gt;</span>Radio buttons<span class=\"p\">&lt;/</span><span class=\"nt\">legend</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_beatles_0&quot;</span><span class=\"p\">&gt;</span>\n        John\n        <span class=\"p\">&lt;</span><span class=\"nt\">span</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;radio&quot;</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">input</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_beatles_0&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;beatles&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;radio&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;john&quot;</span> <span class=\"na\">required</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">span</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_beatles_1&quot;</span><span class=\"p\">&gt;</span>\n        Paul\n        <span class=\"p\">&lt;</span><span class=\"nt\">span</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;radio&quot;</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">input</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_beatles_1&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;beatles&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;radio&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;paul&quot;</span> <span class=\"na\">required</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">span</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_beatles_2&quot;</span><span class=\"p\">&gt;</span>\n        George\n        <span class=\"p\">&lt;</span><span class=\"nt\">span</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;radio&quot;</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">input</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_beatles_2&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;beatles&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;radio&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;george&quot;</span> <span class=\"na\">required</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">span</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_beatles_3&quot;</span><span class=\"p\">&gt;</span>\n        Ringo\n        <span class=\"p\">&lt;</span><span class=\"nt\">span</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;radio&quot;</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">input</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_beatles_3&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;beatles&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;radio&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;ringo&quot;</span> <span class=\"na\">required</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">span</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">fieldset</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Si vous décidez de ne pas passer en boucle les boutons radio, par exemple si le gabarit contient <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">myform.beatles</span> <span class=\"pre\">}}</span></code>, ils seront contenus dans un élément <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;div&gt;</span></code> avec des balises <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;div&gt;</span></code>, comme ci-dessus.</p>\n<p>Le conteneur <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;div&gt;</span></code> supérieur reçoit l’attribut <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> du composant, si défini, ou <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/api/#django.forms.BoundField.auto_id\" title=\"django.forms.BoundField.auto_id\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">BoundField.auto_id</span></code></a> dans le cas contraire.</p>\n<p>Lors de l’itération sur les boutons radio, les balises``label`` and <code class=\"docutils literal notranslate\"><span class=\"pre\">input</span></code>  incluent les attributs <code class=\"docutils literal notranslate\"><span class=\"pre\">for</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code>, respectivement. Chaque bouton radio inclut un attribut <code class=\"docutils literal notranslate\"><span class=\"pre\">id_for_label</span></code> produisant l’ID de l’élément.</p>\n</dd></dl>\n\n</section>\n<section id=\"checkboxselectmultiple\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">CheckboxSelectMultiple</span></code><a class=\"heading-anchor\" href=\"#checkboxselectmultiple\"><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.CheckboxSelectMultiple\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">CheckboxSelectMultiple</span></span><a class=\"heading-anchor\" href=\"#django.forms.CheckboxSelectMultiple\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/checkbox_select.html'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">option_template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/checkbox_option.html'</span></code></p></li>\n</ul>\n<p>Semblable à <a class=\"reference internal\" href=\"#django.forms.SelectMultiple\" title=\"django.forms.SelectMultiple\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SelectMultiple</span></code></a>, mais affiché sous forme de liste de cases à cocher :</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\">div</span><span class=\"p\">&gt;</span>\n  <span class=\"p\">&lt;</span><span class=\"nt\">div</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">input</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;checkbox&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;...&quot;</span> <span class=\"p\">&gt;&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n  ...\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Le conteneur <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;div&gt;</span></code> supérieur reçoit l’attribut <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> du composant, si défini, ou <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/api/#django.forms.BoundField.auto_id\" title=\"django.forms.BoundField.auto_id\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">BoundField.auto_id</span></code></a> dans le cas contraire.</p>\n</dd></dl>\n\n<p>Comme pour <a class=\"reference internal\" href=\"#django.forms.RadioSelect\" title=\"django.forms.RadioSelect\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RadioSelect</span></code></a>, il est possible de parcourir en boucle les cases à cocher individuelles pour obtenir les choix du composant. Au contraire de <a class=\"reference internal\" href=\"#django.forms.RadioSelect\" title=\"django.forms.RadioSelect\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RadioSelect</span></code></a>, les cases à cocher n’incluront pas l’attribut HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">required</span></code> si le champ est obligatoire car la validation des navigateurs exigerait alors que toutes les cases soient cochées au lieu d’au moins une.</p>\n<p>Lors de l’itération sur les cases à cocher, les balises``label`` and <code class=\"docutils literal notranslate\"><span class=\"pre\">input</span></code>  incluent les attributs <code class=\"docutils literal notranslate\"><span class=\"pre\">for</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code>, respectivement. Chaque case à cocher inclut un attribut <code class=\"docutils literal notranslate\"><span class=\"pre\">id_for_label</span></code> produisant l’ID de l’élément.</p>\n</section>\n</section>\n<section id=\"file-upload-widgets\">\n<span id=\"id5\"></span><h3>Composants d’envoi de fichier<a class=\"heading-anchor\" href=\"#file-upload-widgets\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"fileinput\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">FileInput</span></code><a class=\"heading-anchor\" href=\"#fileinput\"><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.FileInput\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">FileInput</span></span><a class=\"heading-anchor\" href=\"#django.forms.FileInput\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/file.html'</span></code></p></li>\n<li><p>Produit : <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;file&quot;</span> <span class=\"pre\">...&gt;</span></code></p></li>\n</ul>\n</dd></dl>\n\n</section>\n<section id=\"clearablefileinput\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">ClearableFileInput</span></code><a class=\"heading-anchor\" href=\"#clearablefileinput\"><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.ClearableFileInput\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">ClearableFileInput</span></span><a class=\"heading-anchor\" href=\"#django.forms.ClearableFileInput\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/clearable_file_input.html'</span></code></p></li>\n<li><p>Produit : <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;file&quot;</span> <span class=\"pre\">...&gt;</span></code>, avec une case à cocher supplémentaire pour effacer la valeur du champ, si le champ n’est pas obligatoire et qu’il comporte une donnée initiale.</p></li>\n</ul>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"composite-widgets\">\n<span id=\"id6\"></span><h3>Composants multiples<a class=\"heading-anchor\" href=\"#composite-widgets\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"multiplehiddeninput\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">MultipleHiddenInput</span></code><a class=\"heading-anchor\" href=\"#multiplehiddeninput\"><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.MultipleHiddenInput\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">MultipleHiddenInput</span></span><a class=\"heading-anchor\" href=\"#django.forms.MultipleHiddenInput\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/multiple_hidden.html'</span></code></p></li>\n<li><p>Produit : plusieurs balises <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;hidden&quot;</span> <span class=\"pre\">...&gt;</span></code></p></li>\n</ul>\n<p>Un composant qui gère plusieurs composants masqués pour des champs qui possèdent une liste de valeurs.</p>\n</dd></dl>\n\n</section>\n<section id=\"splitdatetimewidget\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">SplitDateTimeWidget</span></code><a class=\"heading-anchor\" href=\"#splitdatetimewidget\"><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.SplitDateTimeWidget\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">SplitDateTimeWidget</span></span><a class=\"heading-anchor\" href=\"#django.forms.SplitDateTimeWidget\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/splitdatetime.html'</span></code></p></li>\n</ul>\n<p>Composant parent (sous-classe de <a class=\"reference internal\" href=\"#django.forms.MultiWidget\" title=\"django.forms.MultiWidget\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MultiWidget</span></code></a>) de deux composants : <a class=\"reference internal\" href=\"#django.forms.DateInput\" title=\"django.forms.DateInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateInput</span></code></a> pour la date et <a class=\"reference internal\" href=\"#django.forms.TimeInput\" title=\"django.forms.TimeInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TimeInput</span></code></a> pour l’heure. Doit être utilisé avec <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/fields/#django.forms.SplitDateTimeField\" title=\"django.forms.SplitDateTimeField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SplitDateTimeField</span></code></a> et non pas <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/fields/#django.forms.DateTimeField\" title=\"django.forms.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></code></a>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">SplitDateTimeWidget</span></code> contient plusieurs paramètres facultatifs :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.SplitDateTimeWidget.date_format\">\n<span class=\"sig-name descname\"><span class=\"pre\">date_format</span></span><a class=\"heading-anchor\" href=\"#django.forms.SplitDateTimeWidget.date_format\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Semblable à <a class=\"reference internal\" href=\"#django.forms.DateInput.format\" title=\"django.forms.DateInput.format\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">DateInput.format</span></code></a></p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.SplitDateTimeWidget.time_format\">\n<span class=\"sig-name descname\"><span class=\"pre\">time_format</span></span><a class=\"heading-anchor\" href=\"#django.forms.SplitDateTimeWidget.time_format\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Semblable à <a class=\"reference internal\" href=\"#django.forms.TimeInput.format\" title=\"django.forms.TimeInput.format\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">TimeInput.format</span></code></a></p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.SplitDateTimeWidget.date_attrs\">\n<span class=\"sig-name descname\"><span class=\"pre\">date_attrs</span></span><a class=\"heading-anchor\" href=\"#django.forms.SplitDateTimeWidget.date_attrs\"><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.SplitDateTimeWidget.time_attrs\">\n<span class=\"sig-name descname\"><span class=\"pre\">time_attrs</span></span><a class=\"heading-anchor\" href=\"#django.forms.SplitDateTimeWidget.time_attrs\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Semblable à <a class=\"reference internal\" href=\"#django.forms.Widget.attrs\" title=\"django.forms.Widget.attrs\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Widget.attrs</span></code></a>. Un dictionnaire contenant des attributs HTML à définir respectivement sur les composants <a class=\"reference internal\" href=\"#django.forms.DateInput\" title=\"django.forms.DateInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateInput</span></code></a> et <a class=\"reference internal\" href=\"#django.forms.TimeInput\" title=\"django.forms.TimeInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TimeInput</span></code></a>. Si ces attributs ne sont pas définis, c’est <a class=\"reference internal\" href=\"#django.forms.Widget.attrs\" title=\"django.forms.Widget.attrs\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Widget.attrs</span></code></a> qui est utilisé à la place.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"splithiddendatetimewidget\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">SplitHiddenDateTimeWidget</span></code><a class=\"heading-anchor\" href=\"#splithiddendatetimewidget\"><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.SplitHiddenDateTimeWidget\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">SplitHiddenDateTimeWidget</span></span><a class=\"heading-anchor\" href=\"#django.forms.SplitHiddenDateTimeWidget\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/splithiddendatetime.html'</span></code></p></li>\n</ul>\n<p>Semblable à <a class=\"reference internal\" href=\"#django.forms.SplitDateTimeWidget\" title=\"django.forms.SplitDateTimeWidget\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SplitDateTimeWidget</span></code></a>, mais utilise <a class=\"reference internal\" href=\"#django.forms.HiddenInput\" title=\"django.forms.HiddenInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HiddenInput</span></code></a> à la fois pour la date et l’heure.</p>\n</dd></dl>\n\n</section>\n<section id=\"selectdatewidget\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">SelectDateWidget</span></code><a class=\"heading-anchor\" href=\"#selectdatewidget\"><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.SelectDateWidget\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">SelectDateWidget</span></span><a class=\"heading-anchor\" href=\"#django.forms.SelectDateWidget\"><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><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django/forms/widgets/select_date.html'</span></code></p></li>\n</ul>\n<p>Composant parent de trois sous-composants <a class=\"reference internal\" href=\"#django.forms.Select\" title=\"django.forms.Select\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Select</span></code></a> pour le mois, le jour et l’année.</p>\n<p>Accepte plusieurs paramètres facultatifs :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.SelectDateWidget.years\">\n<span class=\"sig-name descname\"><span class=\"pre\">years</span></span><a class=\"heading-anchor\" href=\"#django.forms.SelectDateWidget.years\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Une liste (ou tuple) facultative d’années à présenter dans la liste à choix « year ». La valeur par défaut est une liste contenant l’année en cours et les 9 années suivantes.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.SelectDateWidget.months\">\n<span class=\"sig-name descname\"><span class=\"pre\">months</span></span><a class=\"heading-anchor\" href=\"#django.forms.SelectDateWidget.months\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Un dictionnaire de mois facultatif à utiliser dans la liste déroulante « mois ».</p>\n<p>Les clés du dictionnaire correspondent au numéro du mois (indice à partir de 1) et les valeurs sont les mois affichés :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">MONTHS</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"mi\">1</span><span class=\"p\">:</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;jan&quot;</span><span class=\"p\">),</span>\n    <span class=\"mi\">2</span><span class=\"p\">:</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;feb&quot;</span><span class=\"p\">),</span>\n    <span class=\"mi\">3</span><span class=\"p\">:</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;mar&quot;</span><span class=\"p\">),</span>\n    <span class=\"mi\">4</span><span class=\"p\">:</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;apr&quot;</span><span class=\"p\">),</span>\n    <span class=\"mi\">5</span><span class=\"p\">:</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;may&quot;</span><span class=\"p\">),</span>\n    <span class=\"mi\">6</span><span class=\"p\">:</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;jun&quot;</span><span class=\"p\">),</span>\n    <span class=\"mi\">7</span><span class=\"p\">:</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;jul&quot;</span><span class=\"p\">),</span>\n    <span class=\"mi\">8</span><span class=\"p\">:</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;aug&quot;</span><span class=\"p\">),</span>\n    <span class=\"mi\">9</span><span class=\"p\">:</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;sep&quot;</span><span class=\"p\">),</span>\n    <span class=\"mi\">10</span><span class=\"p\">:</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;oct&quot;</span><span class=\"p\">),</span>\n    <span class=\"mi\">11</span><span class=\"p\">:</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;nov&quot;</span><span class=\"p\">),</span>\n    <span class=\"mi\">12</span><span class=\"p\">:</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;dec&quot;</span><span class=\"p\">),</span>\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.SelectDateWidget.empty_label\">\n<span class=\"sig-name descname\"><span class=\"pre\">empty_label</span></span><a class=\"heading-anchor\" href=\"#django.forms.SelectDateWidget.empty_label\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Si le champ <a class=\"reference internal\" href=\"/fr/6.0/ref/forms/fields/#django.forms.DateField\" title=\"django.forms.DateField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateField</span></code></a> n’est pas obligatoire, <a class=\"reference internal\" href=\"#django.forms.SelectDateWidget\" title=\"django.forms.SelectDateWidget\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SelectDateWidget</span></code></a> comportera un choix vide au sommet de la liste (qui s’affiche comme <code class=\"docutils literal notranslate\"><span class=\"pre\">---</span></code> par défaut). Vous pouvez modifier le texte de ce choix avec l’attribut <code class=\"docutils literal notranslate\"><span class=\"pre\">empty_label</span></code>. <code class=\"docutils literal notranslate\"><span class=\"pre\">empty_label</span></code> peut être une chaîne, une liste ou un tuple. Lorsqu’une chaîne est utilisée, toutes les listes de choix auront chacune un choix vide avec ce contenu. Si <code class=\"docutils literal notranslate\"><span class=\"pre\">empty_label</span></code> est une liste ou un tuple de 3 éléments textuels, les listes de choix possèdent chacune leur propre contenu. Les textes doivent apparaître dans cet ordre : <code class=\"docutils literal notranslate\"><span class=\"pre\">('texte_année',</span> <span class=\"pre\">'texte_mois',</span> <span class=\"pre\">'texte_jour')</span></code>.</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button 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 code\"><code><span class=\"c1\"># A custom empty label with string</span>\n<span class=\"n\">field1</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">widget</span><span class=\"o\">=</span><span class=\"n\">SelectDateWidget</span><span class=\"p\">(</span><span class=\"n\">empty_label</span><span class=\"o\">=</span><span class=\"s2\">&quot;Nothing&quot;</span><span class=\"p\">))</span>\n\n<span class=\"c1\"># A custom empty label with tuple</span>\n<span class=\"n\">field1</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span>\n    <span class=\"n\">widget</span><span class=\"o\">=</span><span class=\"n\">SelectDateWidget</span><span class=\"p\">(</span>\n        <span class=\"n\">empty_label</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s2\">&quot;Choose Year&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Choose Month&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Choose Day&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">),</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n</section>\n</section>","rootId":"module-django.forms.widgets","toc":[{"title":"Définition des composants","anchor":"specifying-widgets","children":[]},{"title":"Définition de paramètres pour les composants","anchor":"setting-arguments-for-widgets","children":[]},{"title":"Personnalisation des instances de composants","anchor":"customizing-widget-instances","children":[{"title":"Ajout de styles aux instances de composants","anchor":"styling-widget-instances","children":[]},{"title":"Ajout de styles aux classes de composants","anchor":"styling-widget-classes","children":[]}]},{"title":"Classes Widget de base","anchor":"base-widget-classes","children":[{"title":"Widget","anchor":"widget","children":[]},{"title":"MultiWidget","anchor":"multiwidget","children":[]}]},{"title":"Composants intégrés","anchor":"built-in-widgets","children":[{"title":"Composants chargés de la saisie de texte","anchor":"widgets-handling-input-of-text","children":[{"title":"TextInput","anchor":"textinput","children":[]},{"title":"NumberInput","anchor":"numberinput","children":[]},{"title":"EmailInput","anchor":"emailinput","children":[]},{"title":"URLInput","anchor":"urlinput","children":[]},{"title":"ColorInput","anchor":"colorinput","children":[]},{"title":"SearchInput","anchor":"searchinput","children":[]},{"title":"TelInput","anchor":"telinput","children":[]},{"title":"PasswordInput","anchor":"passwordinput","children":[]},{"title":"HiddenInput","anchor":"hiddeninput","children":[]},{"title":"DateInput","anchor":"dateinput","children":[]},{"title":"DateTimeInput","anchor":"datetimeinput","children":[]},{"title":"TimeInput","anchor":"timeinput","children":[]},{"title":"Textarea","anchor":"textarea","children":[]}]},{"title":"Composants cases à cocher et listes à choix","anchor":"selector-and-checkbox-widgets","children":[{"title":"CheckboxInput","anchor":"checkboxinput","children":[]},{"title":"Select","anchor":"select","children":[]},{"title":"NullBooleanSelect","anchor":"nullbooleanselect","children":[]},{"title":"SelectMultiple","anchor":"selectmultiple","children":[]},{"title":"RadioSelect","anchor":"radioselect","children":[]},{"title":"CheckboxSelectMultiple","anchor":"checkboxselectmultiple","children":[]}]},{"title":"Composants d’envoi de fichier","anchor":"file-upload-widgets","children":[{"title":"FileInput","anchor":"fileinput","children":[]},{"title":"ClearableFileInput","anchor":"clearablefileinput","children":[]}]},{"title":"Composants multiples","anchor":"composite-widgets","children":[{"title":"MultipleHiddenInput","anchor":"multiplehiddeninput","children":[]},{"title":"SplitDateTimeWidget","anchor":"splitdatetimewidget","children":[]},{"title":"SplitHiddenDateTimeWidget","anchor":"splithiddendatetimewidget","children":[]},{"title":"SelectDateWidget","anchor":"selectdatewidget","children":[]}]}]}],"breadcrumbs":[{"docname":"ref/index","title":"Référence de l’API","url":"/fr/6.0/ref/"},{"docname":"ref/forms/index","title":"Formulaires","url":"/fr/6.0/ref/forms/"}],"prev":{"docname":"ref/forms/renderers","title":"L’API du rendu des formulaires","url":"/fr/6.0/ref/forms/renderers/"},"next":{"docname":"ref/forms/validation","title":"La validation de formulaires et de champs","url":"/fr/6.0/ref/forms/validation/"},"formats":{"html":"/fr/6.0/ref/forms/widgets/","markdown":"/fr/6.0/ref/forms/widgets.md","json":"/fr/6.0/ref/forms/widgets.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/ref/forms/widgets.txt","official":"https://docs.djangoproject.com/fr/6.0/ref/forms/widgets/","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"]}