{"title":"Form fields","version":"5.1","locale":"en","docname":"ref/forms/fields","url":"/en/5.1/ref/forms/fields/","canonical":"https://djangodocs.dev/en/5.1/ref/forms/fields/","summary":"When you create a Form class, the most important part is defining the fields of the form.","html":"<span id=\"form-fields\"></span><h1>Form fields<a class=\"heading-anchor\" href=\"#module-django.forms.fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Field</span><a class=\"heading-anchor\" href=\"#django.forms.Field\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>When you create a <code class=\"docutils literal notranslate\">Form</code> class, the most important part is defining the\nfields of the form. Each field has custom validation logic, along with a few\nother hooks.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.clean\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">clean</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">value</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Field.clean\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Although the primary way you’ll use <code class=\"docutils literal notranslate\">Field</code> classes is in <code class=\"docutils literal notranslate\">Form</code> classes,\nyou can also instantiate them and use them directly to get a better idea of\nhow they work. Each <code class=\"docutils literal notranslate\">Field</code> instance has a <code class=\"docutils literal notranslate\">clean()</code> method, which takes\na single argument and either raises a\n<code class=\"docutils literal notranslate\">django.core.exceptions.ValidationError</code> exception or returns the clean\nvalue:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> forms<span class=\"o\">.</span>EmailField<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"s2\">&quot;foo@example.com&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;foo@example.com&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"s2\">&quot;invalid email address&quot;</span><span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">ValidationError</span>: [&#39;Enter a valid email address.&#39;]\n</code></pre></div>\n<section id=\"core-field-arguments\">\n<span id=\"id1\"></span><h2>Core field arguments<a class=\"heading-anchor\" href=\"#core-field-arguments\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Each <code class=\"docutils literal notranslate\">Field</code> class constructor takes at least these arguments. Some\n<code class=\"docutils literal notranslate\">Field</code> classes take additional, field-specific arguments, but the following\nshould <em>always</em> be accepted:</p>\n<section id=\"required\">\n<h3><code class=\"docutils literal notranslate\">required</code><a class=\"heading-anchor\" href=\"#required\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.required\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">required</span><a class=\"heading-anchor\" href=\"#django.forms.Field.required\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>By default, each <code class=\"docutils literal notranslate\">Field</code> class assumes the value is required, so if you pass\nan empty value – either <code class=\"docutils literal notranslate\">None</code> or the empty string (<code class=\"docutils literal notranslate\">&quot;&quot;</code>) – then\n<code class=\"docutils literal notranslate\">clean()</code> will raise a <code class=\"docutils literal notranslate\">ValidationError</code> exception:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;foo&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">ValidationError</span>: [&#39;This field is required.&#39;]\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">ValidationError</span>: [&#39;This field is required.&#39;]\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;0&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;True&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;False&#39;</span>\n</code></pre></div>\n<p>To specify that a field is <em>not</em> required, pass <code class=\"docutils literal notranslate\">required=False</code> to the\n<code class=\"docutils literal notranslate\">Field</code> constructor:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">(</span>required<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;foo&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;0&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;True&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;False&#39;</span>\n</code></pre></div>\n<p>If a <code class=\"docutils literal notranslate\">Field</code> has <code class=\"docutils literal notranslate\">required=False</code> and you pass <code class=\"docutils literal notranslate\">clean()</code> an empty value,\nthen <code class=\"docutils literal notranslate\">clean()</code> will return a <em>normalized</em> empty value rather than raising\n<code class=\"docutils literal notranslate\">ValidationError</code>. For <code class=\"docutils literal notranslate\">CharField</code>, this will return\n<a class=\"reference internal\" href=\"#django.forms.CharField.empty_value\" title=\"django.forms.CharField.empty_value\"><code class=\"xref py py-attr docutils literal notranslate\">empty_value</code></a> which defaults to an empty string. For other\n<code class=\"docutils literal notranslate\">Field</code> classes, it might be <code class=\"docutils literal notranslate\">None</code>. (This varies from field to field.)</p>\n<p>Widgets of required form fields have the <code class=\"docutils literal notranslate\">required</code> HTML attribute. Set the\n<a class=\"reference internal\" href=\"/en/5.1/ref/forms/api/#django.forms.Form.use_required_attribute\" title=\"django.forms.Form.use_required_attribute\"><code class=\"xref py py-attr docutils literal notranslate\">Form.use_required_attribute</code></a> attribute to <code class=\"docutils literal notranslate\">False</code> to disable it. The\n<code class=\"docutils literal notranslate\">required</code> attribute isn’t included on forms of formsets because the browser\nvalidation may not be correct when adding and deleting formsets.</p>\n</section>\n<section id=\"label\">\n<h3><code class=\"docutils literal notranslate\">label</code><a class=\"heading-anchor\" href=\"#label\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.label\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">label</span><a class=\"heading-anchor\" href=\"#django.forms.Field.label\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The <code class=\"docutils literal notranslate\">label</code> argument lets you specify the “human-friendly” label for this\nfield. This is used when the <code class=\"docutils literal notranslate\">Field</code> is displayed in a <code class=\"docutils literal notranslate\">Form</code>.</p>\n<p>As explained in <a class=\"reference internal\" href=\"/en/5.1/ref/forms/api/#ref-forms-api-outputting-html\"><span class=\"std std-ref\">Outputting forms as HTML</span></a>, the default label for a\n<code class=\"docutils literal notranslate\">Field</code> is generated from the field name by converting all underscores to\nspaces and upper-casing the first letter. Specify <code class=\"docutils literal notranslate\">label</code> if that default\nbehavior doesn’t result in an adequate label.</p>\n<p>Here’s a full example <code class=\"docutils literal notranslate\">Form</code> that implements <code class=\"docutils literal notranslate\">label</code> for two of its fields.\nWe’ve specified <code class=\"docutils literal notranslate\">auto_id=False</code> to simplify the output:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">CommentForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    name <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">(</span>label<span class=\"o\">=</span><span class=\"s2\">&quot;Your name&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    url <span class=\"o\">=</span> forms<span class=\"o\">.</span>URLField<span class=\"p\">(</span>label<span class=\"o\">=</span><span class=\"s2\">&quot;Your website&quot;</span><span class=\"p\">,</span> required<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    comment <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">()</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> CommentForm<span class=\"p\">(</span>auto_id<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>f<span class=\"p\">)</span>\n<span class=\"go\">&lt;div&gt;Your name:&lt;input type=&quot;text&quot; name=&quot;name&quot; required&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;Your website:&lt;input type=&quot;url&quot; name=&quot;url&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;Comment:&lt;input type=&quot;text&quot; name=&quot;comment&quot; required&gt;&lt;/div&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"label-suffix\">\n<h3><code class=\"docutils literal notranslate\">label_suffix</code><a class=\"heading-anchor\" href=\"#label-suffix\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.label_suffix\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">label_suffix</span><a class=\"heading-anchor\" href=\"#django.forms.Field.label_suffix\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The <code class=\"docutils literal notranslate\">label_suffix</code> argument lets you override the form’s\n<a class=\"reference internal\" href=\"/en/5.1/ref/forms/api/#django.forms.Form.label_suffix\" title=\"django.forms.Form.label_suffix\"><code class=\"xref py py-attr docutils literal notranslate\">label_suffix</code></a> on a per-field basis:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">ContactForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    age <span class=\"o\">=</span> forms<span class=\"o\">.</span>IntegerField<span class=\"p\">()</span>\n<span class=\"gp\">... </span>    nationality <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">()</span>\n<span class=\"gp\">... </span>    captcha_answer <span class=\"o\">=</span> forms<span class=\"o\">.</span>IntegerField<span class=\"p\">(</span>label<span class=\"o\">=</span><span class=\"s2\">&quot;2 + 2&quot;</span><span class=\"p\">,</span> label_suffix<span class=\"o\">=</span><span class=\"s2\">&quot; =&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> ContactForm<span class=\"p\">(</span>label_suffix<span class=\"o\">=</span><span class=\"s2\">&quot;?&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>f<span class=\"p\">)</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_age&quot;&gt;Age?&lt;/label&gt;&lt;input type=&quot;number&quot; name=&quot;age&quot; required id=&quot;id_age&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_nationality&quot;&gt;Nationality?&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;nationality&quot; required id=&quot;id_nationality&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_captcha_answer&quot;&gt;2 + 2 =&lt;/label&gt;&lt;input type=&quot;number&quot; name=&quot;captcha_answer&quot; required id=&quot;id_captcha_answer&quot;&gt;&lt;/div&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"initial\">\n<h3><code class=\"docutils literal notranslate\">initial</code><a class=\"heading-anchor\" href=\"#initial\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.initial\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">initial</span><a class=\"heading-anchor\" href=\"#django.forms.Field.initial\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The <code class=\"docutils literal notranslate\">initial</code> argument lets you specify the initial value to use when\nrendering this <code class=\"docutils literal notranslate\">Field</code> in an unbound <code class=\"docutils literal notranslate\">Form</code>.</p>\n<p>To specify dynamic initial data, see the <a class=\"reference internal\" href=\"/en/5.1/ref/forms/api/#django.forms.Form.initial\" title=\"django.forms.Form.initial\"><code class=\"xref py py-attr docutils literal notranslate\">Form.initial</code></a> parameter.</p>\n<p>The use-case for this is when you want to display an “empty” form in which a\nfield is initialized to a particular value. For example:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">CommentForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    name <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">(</span>initial<span class=\"o\">=</span><span class=\"s2\">&quot;Your name&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    url <span class=\"o\">=</span> forms<span class=\"o\">.</span>URLField<span class=\"p\">(</span>initial<span class=\"o\">=</span><span class=\"s2\">&quot;https://&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    comment <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">()</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> CommentForm<span class=\"p\">(</span>auto_id<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>f<span class=\"p\">)</span>\n<span class=\"go\">&lt;div&gt;Name:&lt;input type=&quot;text&quot; name=&quot;name&quot; value=&quot;Your name&quot; required&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;Url:&lt;input type=&quot;url&quot; name=&quot;url&quot; value=&quot;https://&quot; required&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;Comment:&lt;input type=&quot;text&quot; name=&quot;comment&quot; required&gt;&lt;/div&gt;</span>\n</code></pre></div>\n<p>You may be thinking, why not just pass a dictionary of the initial values as\ndata when displaying the form? Well, if you do that, you’ll trigger validation,\nand the HTML output will include any validation errors:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">CommentForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    name <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">()</span>\n<span class=\"gp\">... </span>    url <span class=\"o\">=</span> forms<span class=\"o\">.</span>URLField<span class=\"p\">()</span>\n<span class=\"gp\">... </span>    comment <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">()</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>default_data <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Your name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;url&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;https://&quot;</span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> CommentForm<span class=\"p\">(</span>default_data<span class=\"p\">,</span> auto_id<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>f<span class=\"p\">)</span>\n<span class=\"go\">&lt;div&gt;Name:</span>\n<span class=\"go\">  &lt;input type=&quot;text&quot; name=&quot;name&quot; value=&quot;Your name&quot; required&gt;</span>\n<span class=\"go\">&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;Url:</span>\n<span class=\"go\">  &lt;ul class=&quot;errorlist&quot;&gt;&lt;li&gt;Enter a valid URL.&lt;/li&gt;&lt;/ul&gt;</span>\n<span class=\"go\">  &lt;input type=&quot;url&quot; name=&quot;url&quot; value=&quot;https://&quot; required aria-invalid=&quot;true&quot;&gt;</span>\n<span class=\"go\">&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;Comment:</span>\n<span class=\"go\">  &lt;ul class=&quot;errorlist&quot;&gt;&lt;li&gt;This field is required.&lt;/li&gt;&lt;/ul&gt;</span>\n<span class=\"go\">  &lt;input type=&quot;text&quot; name=&quot;comment&quot; required aria-invalid=&quot;true&quot;&gt;</span>\n<span class=\"go\">&lt;/div&gt;</span>\n</code></pre></div>\n<p>This is why <code class=\"docutils literal notranslate\">initial</code> values are only displayed for unbound forms. For bound\nforms, the HTML output will use the bound data.</p>\n<p>Also note that <code class=\"docutils literal notranslate\">initial</code> values are <em>not</em> used as “fallback” data in\nvalidation if a particular field’s value is not given. <code class=\"docutils literal notranslate\">initial</code> values are\n<em>only</em> intended for initial form display:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">CommentForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    name <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">(</span>initial<span class=\"o\">=</span><span class=\"s2\">&quot;Your name&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    url <span class=\"o\">=</span> forms<span class=\"o\">.</span>URLField<span class=\"p\">(</span>initial<span class=\"o\">=</span><span class=\"s2\">&quot;https://&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    comment <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">()</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>data <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;url&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;comment&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Foo&quot;</span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> CommentForm<span class=\"p\">(</span>data<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>is_valid<span class=\"p\">()</span>\n<span class=\"go\">False</span>\n<span class=\"go\"># The form does *not* fallback to using the initial values.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>errors\n<span class=\"go\">{&#39;url&#39;: [&#39;This field is required.&#39;], &#39;name&#39;: [&#39;This field is required.&#39;]}</span>\n</code></pre></div>\n<p>Instead of a constant, you can also pass any callable:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span> <span class=\"nn\">datetime</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">DateForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    day <span class=\"o\">=</span> forms<span class=\"o\">.</span>DateField<span class=\"p\">(</span>initial<span class=\"o\">=</span>datetime<span class=\"o\">.</span>date<span class=\"o\">.</span>today<span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>DateForm<span class=\"p\">())</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_day&quot;&gt;Day:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;day&quot; value=&quot;2023-02-11&quot; required id=&quot;id_day&quot;&gt;&lt;/div&gt;</span>\n</code></pre></div>\n<p>The callable will be evaluated only when the unbound form is displayed, not when it is defined.</p>\n</section>\n<section id=\"widget\">\n<h3><code class=\"docutils literal notranslate\">widget</code><a class=\"heading-anchor\" href=\"#widget\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.widget\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">widget</span><a class=\"heading-anchor\" href=\"#django.forms.Field.widget\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The <code class=\"docutils literal notranslate\">widget</code> argument lets you specify a <code class=\"docutils literal notranslate\">Widget</code> class to use when\nrendering this <code class=\"docutils literal notranslate\">Field</code>. See <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/\"><span class=\"doc\">Widgets</span></a> for more information.</p>\n</section>\n<section id=\"help-text\">\n<h3><code class=\"docutils literal notranslate\">help_text</code><a class=\"heading-anchor\" href=\"#help-text\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.help_text\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">help_text</span><a class=\"heading-anchor\" href=\"#django.forms.Field.help_text\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The <code class=\"docutils literal notranslate\">help_text</code> argument lets you specify descriptive text for this\n<code class=\"docutils literal notranslate\">Field</code>. If you provide <code class=\"docutils literal notranslate\">help_text</code>, it will be displayed next to the\n<code class=\"docutils literal notranslate\">Field</code> when the <code class=\"docutils literal notranslate\">Field</code> is rendered by one of the convenience <code class=\"docutils literal notranslate\">Form</code>\nmethods (e.g., <code class=\"docutils literal notranslate\">as_ul()</code>).</p>\n<p>Like the model field’s <a class=\"reference internal\" href=\"/en/5.1/ref/models/fields/#django.db.models.Field.help_text\" title=\"django.db.models.Field.help_text\"><code class=\"xref py py-attr docutils literal notranslate\">help_text</code></a>, this value\nisn’t HTML-escaped in automatically-generated forms.</p>\n<p>Here’s a full example <code class=\"docutils literal notranslate\">Form</code> that implements <code class=\"docutils literal notranslate\">help_text</code> for two of its\nfields. We’ve specified <code class=\"docutils literal notranslate\">auto_id=False</code> to simplify the output:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">HelpTextContactForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    subject <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> help_text<span class=\"o\">=</span><span class=\"s2\">&quot;100 characters max.&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    message <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">()</span>\n<span class=\"gp\">... </span>    sender <span class=\"o\">=</span> forms<span class=\"o\">.</span>EmailField<span class=\"p\">(</span>help_text<span class=\"o\">=</span><span class=\"s2\">&quot;A valid email address, please.&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    cc_myself <span class=\"o\">=</span> forms<span class=\"o\">.</span>BooleanField<span class=\"p\">(</span>required<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> HelpTextContactForm<span class=\"p\">(</span>auto_id<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>f<span class=\"p\">)</span>\n<span class=\"go\">&lt;div&gt;Subject:&lt;div class=&quot;helptext&quot;&gt;100 characters max.&lt;/div&gt;&lt;input type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; required&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;Message:&lt;input type=&quot;text&quot; name=&quot;message&quot; required&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;Sender:&lt;div class=&quot;helptext&quot;&gt;A valid email address, please.&lt;/div&gt;&lt;input type=&quot;email&quot; name=&quot;sender&quot; required&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;Cc myself:&lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot;&gt;&lt;/div&gt;</span>\n</code></pre></div>\n<p>When a field has help text it is associated with its input using the\n<code class=\"docutils literal notranslate\">aria-describedby</code> HTML attribute. If the widget is rendered in a\n<code class=\"docutils literal notranslate\">&lt;fieldset&gt;</code> then <code class=\"docutils literal notranslate\">aria-describedby</code> is added to this element, otherwise it\nis added to the widget’s <code class=\"docutils literal notranslate\">&lt;input&gt;</code>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">UserForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    username <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">255</span><span class=\"p\">,</span> help_text<span class=\"o\">=</span><span class=\"s2\">&quot;e.g., user@example.com&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> UserForm<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>f<span class=\"p\">)</span>\n<span class=\"go\">&lt;div&gt;</span>\n<span class=\"go\">&lt;label for=&quot;id_username&quot;&gt;Username:&lt;/label&gt;</span>\n<span class=\"go\">&lt;div class=&quot;helptext&quot; id=&quot;id_username_helptext&quot;&gt;e.g., user@example.com&lt;/div&gt;</span>\n<span class=\"go\">&lt;input type=&quot;text&quot; name=&quot;username&quot; maxlength=&quot;255&quot; required aria-describedby=&quot;id_username_helptext&quot; id=&quot;id_username&quot;&gt;</span>\n<span class=\"go\">&lt;/div&gt;</span>\n</code></pre></div>\n<p>When adding a custom <code class=\"docutils literal notranslate\">aria-describedby</code> attribute, make sure to also include\nthe <code class=\"docutils literal notranslate\">id</code> of the <code class=\"docutils literal notranslate\">help_text</code> element (if used) in the desired order. For\nscreen reader users, descriptions will be read in their order of appearance\ninside <code class=\"docutils literal notranslate\">aria-describedby</code>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">UserForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    username <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">(</span>\n<span class=\"gp\">... </span>        max_length<span class=\"o\">=</span><span class=\"mi\">255</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        help_text<span class=\"o\">=</span><span class=\"s2\">&quot;e.g., user@example.com&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        widget<span class=\"o\">=</span>forms<span class=\"o\">.</span>TextInput<span class=\"p\">(</span>\n<span class=\"gp\">... </span>            attrs<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;aria-describedby&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;custom-description id_username_helptext&quot;</span><span class=\"p\">},</span>\n<span class=\"gp\">... </span>        <span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> UserForm<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>f<span class=\"p\">[</span><span class=\"s2\">&quot;username&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;input type=&quot;text&quot; name=&quot;username&quot; aria-describedby=&quot;custom-description id_username_helptext&quot; maxlength=&quot;255&quot; id=&quot;id_username&quot; required&gt;</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"5.0\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 5.0</p><p><code class=\"docutils literal notranslate\">aria-describedby</code> was added to associate <code class=\"docutils literal notranslate\">help_text</code> with its input.</p>\n</aside>\n<aside class=\"version-note version-changed\" data-version=\"5.1\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 5.1</p><p><code class=\"docutils literal notranslate\">aria-describedby</code> support was added for <code class=\"docutils literal notranslate\">&lt;fieldset&gt;</code>.</p>\n</aside>\n</section>\n<section id=\"error-messages\">\n<h3><code class=\"docutils literal notranslate\">error_messages</code><a class=\"heading-anchor\" href=\"#error-messages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.error_messages\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">error_messages</span><a class=\"heading-anchor\" href=\"#django.forms.Field.error_messages\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The <code class=\"docutils literal notranslate\">error_messages</code> argument lets you override the default messages that the\nfield will raise. Pass in a dictionary with keys matching the error messages you\nwant to override. For example, here is the default error message:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"gp\">&gt;&gt;&gt; </span>generic <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>generic<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n  <span class=\"c\">...</span>\n<span class=\"gr\">ValidationError</span>: [&#39;This field is required.&#39;]\n</code></pre></div>\n<p>And here is a custom error message:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>name <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">(</span>error_messages<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;required&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Please enter your name&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>name<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n  <span class=\"c\">...</span>\n<span class=\"gr\">ValidationError</span>: [&#39;Please enter your name&#39;]\n</code></pre></div>\n<p>In the <a class=\"reference internal\" href=\"#built-in-field-classes\">built-in Field classes</a> section below, each <code class=\"docutils literal notranslate\">Field</code> defines the\nerror message keys it uses.</p>\n</section>\n<section id=\"validators\">\n<h3><code class=\"docutils literal notranslate\">validators</code><a class=\"heading-anchor\" href=\"#validators\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.validators\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">validators</span><a class=\"heading-anchor\" href=\"#django.forms.Field.validators\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The <code class=\"docutils literal notranslate\">validators</code> argument lets you provide a list of validation functions\nfor this field.</p>\n<p>See the <a class=\"reference internal\" href=\"/en/5.1/ref/validators/\"><span class=\"doc\">validators documentation</span></a> for more information.</p>\n</section>\n<section id=\"localize\">\n<h3><code class=\"docutils literal notranslate\">localize</code><a class=\"heading-anchor\" href=\"#localize\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.localize\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">localize</span><a class=\"heading-anchor\" href=\"#django.forms.Field.localize\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The <code class=\"docutils literal notranslate\">localize</code> argument enables the localization of form data input, as well\nas the rendered output.</p>\n<p>See the <a class=\"reference internal\" href=\"/en/5.1/topics/i18n/formatting/\"><span class=\"doc\">format localization documentation</span></a> for\nmore information.</p>\n</section>\n<section id=\"disabled\">\n<h3><code class=\"docutils literal notranslate\">disabled</code><a class=\"heading-anchor\" href=\"#disabled\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.disabled\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">disabled</span><a class=\"heading-anchor\" href=\"#django.forms.Field.disabled\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The <code class=\"docutils literal notranslate\">disabled</code> boolean argument, when set to <code class=\"docutils literal notranslate\">True</code>, disables a form field\nusing the <code class=\"docutils literal notranslate\">disabled</code> HTML attribute so that it won’t be editable by users.\nEven if a user tampers with the field’s value submitted to the server, it will\nbe ignored in favor of the value from the form’s initial data.</p>\n</section>\n<section id=\"template-name\">\n<h3><code class=\"docutils literal notranslate\">template_name</code><a class=\"heading-anchor\" href=\"#template-name\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.template_name\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">template_name</span><a class=\"heading-anchor\" href=\"#django.forms.Field.template_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<aside class=\"version-note version-added\" data-version=\"5.0\" role=\"note\">\n<p class=\"version-note-title\">New in Django 5.0</p></aside>\n<p>The <code class=\"docutils literal notranslate\">template_name</code> argument allows a custom template to be used when the\nfield is rendered with <a class=\"reference internal\" href=\"/en/5.1/ref/forms/api/#django.forms.BoundField.as_field_group\" title=\"django.forms.BoundField.as_field_group\"><code class=\"xref py py-meth docutils literal notranslate\">as_field_group()</code></a>. By\ndefault this value is set to <code class=\"docutils literal notranslate\">&quot;django/forms/field.html&quot;</code>. Can be changed per\nfield by overriding this attribute or more generally by overriding the default\ntemplate, see also <a class=\"reference internal\" href=\"/en/5.1/ref/forms/renderers/#overriding-built-in-field-templates\"><span class=\"std std-ref\">Overriding built-in field templates</span></a>.</p>\n</section>\n</section>\n<section id=\"checking-if-the-field-data-has-changed\">\n<h2>Checking if the field data has changed<a class=\"heading-anchor\" href=\"#checking-if-the-field-data-has-changed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"has-changed\">\n<h3><code class=\"docutils literal notranslate\">has_changed()</code><a class=\"heading-anchor\" href=\"#has-changed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Field.has_changed\">\n<span class=\"sig-prename descclassname\">Field.</span><span class=\"sig-name descname\">has_changed</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Field.has_changed\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The <code class=\"docutils literal notranslate\">has_changed()</code> method is used to determine if the field value has changed\nfrom the initial value. Returns <code class=\"docutils literal notranslate\">True</code> or <code class=\"docutils literal notranslate\">False</code>.</p>\n<p>See the <a class=\"reference internal\" href=\"/en/5.1/ref/forms/api/#django.forms.Form.has_changed\" title=\"django.forms.Form.has_changed\"><code class=\"xref py py-class docutils literal notranslate\">Form.has_changed()</code></a> documentation for more information.</p>\n</section>\n</section>\n<section id=\"built-in-field-classes\">\n<span id=\"built-in-fields\"></span><h2>Built-in <code class=\"docutils literal notranslate\">Field</code> classes<a class=\"heading-anchor\" href=\"#built-in-field-classes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Naturally, the <code class=\"docutils literal notranslate\">forms</code> library comes with a set of <code class=\"docutils literal notranslate\">Field</code> classes that\nrepresent common validation needs. This section documents each built-in field.</p>\n<p>For each field, we describe the default widget used if you don’t specify\n<code class=\"docutils literal notranslate\">widget</code>. We also specify the value returned when you provide an empty value\n(see the section on <code class=\"docutils literal notranslate\">required</code> above to understand what that means).</p>\n<section id=\"booleanfield\">\n<h3><code class=\"docutils literal notranslate\">BooleanField</code><a class=\"heading-anchor\" href=\"#booleanfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.BooleanField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">BooleanField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.BooleanField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.CheckboxInput\" title=\"django.forms.CheckboxInput\"><code class=\"xref py py-class docutils literal notranslate\">CheckboxInput</code></a></p></li>\n<li><p>Empty value: <code class=\"docutils literal notranslate\">False</code></p></li>\n<li><p>Normalizes to: A Python <code class=\"docutils literal notranslate\">True</code> or <code class=\"docutils literal notranslate\">False</code> value.</p></li>\n<li><p>Validates that the value is <code class=\"docutils literal notranslate\">True</code> (e.g. the check box is checked) if\nthe field has <code class=\"docutils literal notranslate\">required=True</code>.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code></p></li>\n</ul>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Since all <code class=\"docutils literal notranslate\">Field</code> subclasses have <code class=\"docutils literal notranslate\">required=True</code> by default, the\nvalidation condition here is important. If you want to include a boolean\nin your form that can be either <code class=\"docutils literal notranslate\">True</code> or <code class=\"docutils literal notranslate\">False</code> (e.g. a checked or\nunchecked checkbox), you must remember to pass in <code class=\"docutils literal notranslate\">required=False</code> when\ncreating the <code class=\"docutils literal notranslate\">BooleanField</code>.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"charfield\">\n<h3><code class=\"docutils literal notranslate\">CharField</code><a class=\"heading-anchor\" href=\"#charfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.CharField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">CharField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.CharField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a></p></li>\n<li><p>Empty value: Whatever you’ve given as <a class=\"reference internal\" href=\"#django.forms.CharField.empty_value\" title=\"django.forms.CharField.empty_value\"><code class=\"xref py py-attr docutils literal notranslate\">empty_value</code></a>.</p></li>\n<li><p>Normalizes to: A string.</p></li>\n<li><p>Uses <a class=\"reference internal\" href=\"/en/5.1/ref/validators/#django.core.validators.MaxLengthValidator\" title=\"django.core.validators.MaxLengthValidator\"><code class=\"xref py py-class docutils literal notranslate\">MaxLengthValidator</code></a> and\n<a class=\"reference internal\" href=\"/en/5.1/ref/validators/#django.core.validators.MinLengthValidator\" title=\"django.core.validators.MinLengthValidator\"><code class=\"xref py py-class docutils literal notranslate\">MinLengthValidator</code></a> if <code class=\"docutils literal notranslate\">max_length</code> and\n<code class=\"docutils literal notranslate\">min_length</code> are provided. Otherwise, all inputs are valid.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">max_length</code>, <code class=\"docutils literal notranslate\">min_length</code></p></li>\n</ul>\n<p>Has the following optional arguments for validation:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.CharField.max_length\">\n<span class=\"sig-name descname\">max_length</span><a class=\"heading-anchor\" href=\"#django.forms.CharField.max_length\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.CharField.min_length\">\n<span class=\"sig-name descname\">min_length</span><a class=\"heading-anchor\" href=\"#django.forms.CharField.min_length\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>If provided, these arguments ensure that the string is at most or at\nleast the given length.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.CharField.strip\">\n<span class=\"sig-name descname\">strip</span><a class=\"heading-anchor\" href=\"#django.forms.CharField.strip\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>If <code class=\"docutils literal notranslate\">True</code> (default), the value will be stripped of leading and\ntrailing whitespace.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.CharField.empty_value\">\n<span class=\"sig-name descname\">empty_value</span><a class=\"heading-anchor\" href=\"#django.forms.CharField.empty_value\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The value to use to represent “empty”. Defaults to an empty string.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"choicefield\">\n<h3><code class=\"docutils literal notranslate\">ChoiceField</code><a class=\"heading-anchor\" href=\"#choicefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ChoiceField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ChoiceField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.ChoiceField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.Select\" title=\"django.forms.Select\"><code class=\"xref py py-class docutils literal notranslate\">Select</code></a></p></li>\n<li><p>Empty value: <code class=\"docutils literal notranslate\">''</code> (an empty string)</p></li>\n<li><p>Normalizes to: A string.</p></li>\n<li><p>Validates that the given value exists in the list of choices.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid_choice</code></p></li>\n</ul>\n<p>The <code class=\"docutils literal notranslate\">invalid_choice</code> error message may contain <code class=\"docutils literal notranslate\">%(value)s</code>, which will be\nreplaced with the selected choice.</p>\n<p>Takes one extra argument:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ChoiceField.choices\">\n<span class=\"sig-name descname\">choices</span><a class=\"heading-anchor\" href=\"#django.forms.ChoiceField.choices\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Either an <a class=\"reference external\" href=\"https://docs.python.org/3/glossary.html#term-iterable\" title=\"(in Python v3.14)\"><span class=\"xref std std-term\">iterable</span></a> of 2-tuples to use as choices for this\nfield, <a class=\"reference internal\" href=\"/en/5.1/ref/models/fields/#field-choices-enum-types\"><span class=\"std std-ref\">enumeration type</span></a>, or a\ncallable that returns such an iterable. This argument accepts the same\nformats as the <code class=\"docutils literal notranslate\">choices</code> argument to a model field. See the\n<a class=\"reference internal\" href=\"/en/5.1/ref/models/fields/#field-choices\"><span class=\"std std-ref\">model field reference documentation on choices</span></a>\nfor more details. If the argument is a callable, it is evaluated each\ntime the field’s form is initialized, in addition to during rendering.\nDefaults to an empty list.</p>\n</dd></dl>\n\n<aside class=\"admonition-choice-type admonition\" role=\"note\">\n<p class=\"admonition-title\">Choice type</p>\n<p>This field normalizes choices to strings, so if choices are required in\nother data types, such as integers or booleans, consider using\n<a class=\"reference internal\" href=\"#django.forms.TypedChoiceField\" title=\"django.forms.TypedChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">TypedChoiceField</code></a> instead.</p>\n</aside>\n<aside class=\"version-note version-changed\" data-version=\"5.0\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 5.0</p><p>Support for mappings and using\n<a class=\"reference internal\" href=\"/en/5.1/ref/models/fields/#field-choices-enum-types\"><span class=\"std std-ref\">enumeration types</span></a> directly in\n<code class=\"docutils literal notranslate\">choices</code> was added.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"datefield\">\n<h3><code class=\"docutils literal notranslate\">DateField</code><a class=\"heading-anchor\" href=\"#datefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.DateField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">DateField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.DateField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.DateInput\" title=\"django.forms.DateInput\"><code class=\"xref py py-class docutils literal notranslate\">DateInput</code></a></p></li>\n<li><p>Empty value: <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Normalizes to: A Python <code class=\"docutils literal notranslate\">datetime.date</code> object.</p></li>\n<li><p>Validates that the given value is either a <code class=\"docutils literal notranslate\">datetime.date</code>,\n<code class=\"docutils literal notranslate\">datetime.datetime</code> or string formatted in a particular date format.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code></p></li>\n</ul>\n<p>Takes one optional argument:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.DateField.input_formats\">\n<span class=\"sig-name descname\">input_formats</span><a class=\"heading-anchor\" href=\"#django.forms.DateField.input_formats\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>An iterable of formats used to attempt to convert a string to a valid\n<code class=\"docutils literal notranslate\">datetime.date</code> object.</p>\n</dd></dl>\n\n<p>If no <code class=\"docutils literal notranslate\">input_formats</code> argument is provided, the default input formats are\ntaken from the active locale format <code class=\"docutils literal notranslate\">DATE_INPUT_FORMATS</code> key, or from\n<a class=\"reference internal\" href=\"/en/5.1/ref/settings/#std-setting-DATE_INPUT_FORMATS\"><code class=\"xref std std-setting docutils literal notranslate\">DATE_INPUT_FORMATS</code></a> if localization is disabled. See also\n<a class=\"reference internal\" href=\"/en/5.1/topics/i18n/formatting/\"><span class=\"doc\">format localization</span></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"datetimefield\">\n<h3><code class=\"docutils literal notranslate\">DateTimeField</code><a class=\"heading-anchor\" href=\"#datetimefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.DateTimeField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">DateTimeField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.DateTimeField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.DateTimeInput\" title=\"django.forms.DateTimeInput\"><code class=\"xref py py-class docutils literal notranslate\">DateTimeInput</code></a></p></li>\n<li><p>Empty value: <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Normalizes to: A Python <code class=\"docutils literal notranslate\">datetime.datetime</code> object.</p></li>\n<li><p>Validates that the given value is either a <code class=\"docutils literal notranslate\">datetime.datetime</code>,\n<code class=\"docutils literal notranslate\">datetime.date</code> or string formatted in a particular datetime format.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code></p></li>\n</ul>\n<p>Takes one optional argument:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.DateTimeField.input_formats\">\n<span class=\"sig-name descname\">input_formats</span><a class=\"heading-anchor\" href=\"#django.forms.DateTimeField.input_formats\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>An iterable of formats used to attempt to convert a string to a valid\n<code class=\"docutils literal notranslate\">datetime.datetime</code> object, in addition to ISO 8601 formats.</p>\n</dd></dl>\n\n<p>The field always accepts strings in ISO 8601 formatted dates or similar\nrecognized by <a class=\"reference internal\" href=\"/en/5.1/ref/utils/#django.utils.dateparse.parse_datetime\" title=\"django.utils.dateparse.parse_datetime\"><code class=\"xref py py-func docutils literal notranslate\">parse_datetime()</code></a>. Some examples\nare:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">'2006-10-25 14:30:59'</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">'2006-10-25T14:30:59'</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">'2006-10-25 14:30'</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">'2006-10-25T14:30'</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">'2006-10-25T14:30Z'</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">'2006-10-25T14:30+02:00'</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">'2006-10-25'</code></p></li>\n</ul>\n<p>If no <code class=\"docutils literal notranslate\">input_formats</code> argument is provided, the default input formats are\ntaken from the active locale format <code class=\"docutils literal notranslate\">DATETIME_INPUT_FORMATS</code> and\n<code class=\"docutils literal notranslate\">DATE_INPUT_FORMATS</code> keys, or from <a class=\"reference internal\" href=\"/en/5.1/ref/settings/#std-setting-DATETIME_INPUT_FORMATS\"><code class=\"xref std std-setting docutils literal notranslate\">DATETIME_INPUT_FORMATS</code></a> and\n<a class=\"reference internal\" href=\"/en/5.1/ref/settings/#std-setting-DATE_INPUT_FORMATS\"><code class=\"xref std std-setting docutils literal notranslate\">DATE_INPUT_FORMATS</code></a> if localization is disabled. See also\n<a class=\"reference internal\" href=\"/en/5.1/topics/i18n/formatting/\"><span class=\"doc\">format localization</span></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"decimalfield\">\n<h3><code class=\"docutils literal notranslate\">DecimalField</code><a class=\"heading-anchor\" href=\"#decimalfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.DecimalField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">DecimalField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.DecimalField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.NumberInput\" title=\"django.forms.NumberInput\"><code class=\"xref py py-class docutils literal notranslate\">NumberInput</code></a> when <a class=\"reference internal\" href=\"#django.forms.Field.localize\" title=\"django.forms.Field.localize\"><code class=\"xref py py-attr docutils literal notranslate\">Field.localize</code></a> is\n<code class=\"docutils literal notranslate\">False</code>, else <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a>.</p></li>\n<li><p>Empty value: <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Normalizes to: A Python <code class=\"docutils literal notranslate\">decimal</code>.</p></li>\n<li><p>Validates that the given value is a decimal. Uses\n<a class=\"reference internal\" href=\"/en/5.1/ref/validators/#django.core.validators.MaxValueValidator\" title=\"django.core.validators.MaxValueValidator\"><code class=\"xref py py-class docutils literal notranslate\">MaxValueValidator</code></a> and\n<a class=\"reference internal\" href=\"/en/5.1/ref/validators/#django.core.validators.MinValueValidator\" title=\"django.core.validators.MinValueValidator\"><code class=\"xref py py-class docutils literal notranslate\">MinValueValidator</code></a> if <code class=\"docutils literal notranslate\">max_value</code> and\n<code class=\"docutils literal notranslate\">min_value</code> are provided. Uses\n<a class=\"reference internal\" href=\"/en/5.1/ref/validators/#django.core.validators.StepValueValidator\" title=\"django.core.validators.StepValueValidator\"><code class=\"xref py py-class docutils literal notranslate\">StepValueValidator</code></a> if <code class=\"docutils literal notranslate\">step_size</code> is\nprovided. Leading and trailing whitespace is ignored.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code>, <code class=\"docutils literal notranslate\">max_value</code>,\n<code class=\"docutils literal notranslate\">min_value</code>, <code class=\"docutils literal notranslate\">max_digits</code>, <code class=\"docutils literal notranslate\">max_decimal_places</code>,\n<code class=\"docutils literal notranslate\">max_whole_digits</code>, <code class=\"docutils literal notranslate\">step_size</code>.</p></li>\n</ul>\n<p>The <code class=\"docutils literal notranslate\">max_value</code> and <code class=\"docutils literal notranslate\">min_value</code> error messages may contain\n<code class=\"docutils literal notranslate\">%(limit_value)s</code>, which will be substituted by the appropriate limit.\nSimilarly, the <code class=\"docutils literal notranslate\">max_digits</code>, <code class=\"docutils literal notranslate\">max_decimal_places</code> and\n<code class=\"docutils literal notranslate\">max_whole_digits</code> error messages may contain <code class=\"docutils literal notranslate\">%(max)s</code>.</p>\n<p>Takes five optional arguments:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.DecimalField.max_value\">\n<span class=\"sig-name descname\">max_value</span><a class=\"heading-anchor\" href=\"#django.forms.DecimalField.max_value\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.DecimalField.min_value\">\n<span class=\"sig-name descname\">min_value</span><a class=\"heading-anchor\" href=\"#django.forms.DecimalField.min_value\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>These control the range of values permitted in the field, and should be\ngiven as <code class=\"docutils literal notranslate\">decimal.Decimal</code> values.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.DecimalField.max_digits\">\n<span class=\"sig-name descname\">max_digits</span><a class=\"heading-anchor\" href=\"#django.forms.DecimalField.max_digits\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The maximum number of digits (those before the decimal point plus those\nafter the decimal point, with leading zeros stripped) permitted in the\nvalue.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.DecimalField.decimal_places\">\n<span class=\"sig-name descname\">decimal_places</span><a class=\"heading-anchor\" href=\"#django.forms.DecimalField.decimal_places\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The maximum number of decimal places permitted.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.DecimalField.step_size\">\n<span class=\"sig-name descname\">step_size</span><a class=\"heading-anchor\" href=\"#django.forms.DecimalField.step_size\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Limit valid inputs to an integral multiple of <code class=\"docutils literal notranslate\">step_size</code>. If\n<code class=\"docutils literal notranslate\">min_value</code> is also provided, it’s added as an offset to determine if\nthe step size matches.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"durationfield\">\n<h3><code class=\"docutils literal notranslate\">DurationField</code><a class=\"heading-anchor\" href=\"#durationfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.DurationField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">DurationField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.DurationField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a></p></li>\n<li><p>Empty value: <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Normalizes to: A Python <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.timedelta\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">timedelta</code></a>.</p></li>\n<li><p>Validates that the given value is a string which can be converted into a\n<code class=\"docutils literal notranslate\">timedelta</code>. The value must be between <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.timedelta.min\" title=\"(in Python v3.14)\"><code class=\"xref py py-attr docutils literal notranslate\">datetime.timedelta.min</code></a>\nand <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.timedelta.max\" title=\"(in Python v3.14)\"><code class=\"xref py py-attr docutils literal notranslate\">datetime.timedelta.max</code></a>.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code>, <code class=\"docutils literal notranslate\">overflow</code>.</p></li>\n</ul>\n<p>Accepts any format understood by\n<a class=\"reference internal\" href=\"/en/5.1/ref/utils/#django.utils.dateparse.parse_duration\" title=\"django.utils.dateparse.parse_duration\"><code class=\"xref py py-func docutils literal notranslate\">parse_duration()</code></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"emailfield\">\n<h3><code class=\"docutils literal notranslate\">EmailField</code><a class=\"heading-anchor\" href=\"#emailfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.EmailField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">EmailField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.EmailField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.EmailInput\" title=\"django.forms.EmailInput\"><code class=\"xref py py-class docutils literal notranslate\">EmailInput</code></a></p></li>\n<li><p>Empty value: Whatever you’ve given as <code class=\"docutils literal notranslate\">empty_value</code>.</p></li>\n<li><p>Normalizes to: A string.</p></li>\n<li><p>Uses <a class=\"reference internal\" href=\"/en/5.1/ref/validators/#django.core.validators.EmailValidator\" title=\"django.core.validators.EmailValidator\"><code class=\"xref py py-class docutils literal notranslate\">EmailValidator</code></a> to validate that\nthe given value is a valid email address, using a moderately complex\nregular expression.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code></p></li>\n</ul>\n<p>Has the optional arguments <code class=\"docutils literal notranslate\">max_length</code>, <code class=\"docutils literal notranslate\">min_length</code>, and\n<code class=\"docutils literal notranslate\">empty_value</code> which work just as they do for <a class=\"reference internal\" href=\"#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\">CharField</code></a>. The\n<code class=\"docutils literal notranslate\">max_length</code> argument defaults to 320 (see <span class=\"target\" id=\"index-0\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc3696.html#section-3\"><strong>RFC 3696 Section 3</strong></a>).</p>\n</dd></dl>\n\n</section>\n<section id=\"filefield\">\n<h3><code class=\"docutils literal notranslate\">FileField</code><a class=\"heading-anchor\" href=\"#filefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.FileField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">FileField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.FileField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.ClearableFileInput\" title=\"django.forms.ClearableFileInput\"><code class=\"xref py py-class docutils literal notranslate\">ClearableFileInput</code></a></p></li>\n<li><p>Empty value: <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Normalizes to: An <code class=\"docutils literal notranslate\">UploadedFile</code> object that wraps the file content\nand file name into a single object.</p></li>\n<li><p>Can validate that non-empty file data has been bound to the form.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code>, <code class=\"docutils literal notranslate\">missing</code>, <code class=\"docutils literal notranslate\">empty</code>,\n<code class=\"docutils literal notranslate\">max_length</code></p></li>\n</ul>\n<p>Has the optional arguments for validation: <code class=\"docutils literal notranslate\">max_length</code> and\n<code class=\"docutils literal notranslate\">allow_empty_file</code>. If provided, these ensure that the file name is at\nmost the given length, and that validation will succeed even if the file\ncontent is empty.</p>\n<p>To learn more about the <code class=\"docutils literal notranslate\">UploadedFile</code> object, see the <a class=\"reference internal\" href=\"/en/5.1/topics/http/file-uploads/\"><span class=\"doc\">file uploads\ndocumentation</span></a>.</p>\n<p>When you use a <code class=\"docutils literal notranslate\">FileField</code> in a form, you must also remember to\n<a class=\"reference internal\" href=\"/en/5.1/ref/forms/api/#binding-uploaded-files\"><span class=\"std std-ref\">bind the file data to the form</span></a>.</p>\n<p>The <code class=\"docutils literal notranslate\">max_length</code> error refers to the length of the filename. In the error\nmessage for that key, <code class=\"docutils literal notranslate\">%(max)d</code> will be replaced with the maximum filename\nlength and <code class=\"docutils literal notranslate\">%(length)d</code> will be replaced with the current filename length.</p>\n</dd></dl>\n\n</section>\n<section id=\"filepathfield\">\n<h3><code class=\"docutils literal notranslate\">FilePathField</code><a class=\"heading-anchor\" href=\"#filepathfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.FilePathField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">FilePathField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.FilePathField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.Select\" title=\"django.forms.Select\"><code class=\"xref py py-class docutils literal notranslate\">Select</code></a></p></li>\n<li><p>Empty value: <code class=\"docutils literal notranslate\">''</code> (an empty string)</p></li>\n<li><p>Normalizes to: A string.</p></li>\n<li><p>Validates that the selected choice exists in the list of choices.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid_choice</code></p></li>\n</ul>\n<p>The field allows choosing from files inside a certain directory. It takes five\nextra arguments; only <code class=\"docutils literal notranslate\">path</code> is required:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.FilePathField.path\">\n<span class=\"sig-name descname\">path</span><a class=\"heading-anchor\" href=\"#django.forms.FilePathField.path\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The absolute path to the directory whose contents you want listed. This\ndirectory must exist.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.FilePathField.recursive\">\n<span class=\"sig-name descname\">recursive</span><a class=\"heading-anchor\" href=\"#django.forms.FilePathField.recursive\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>If <code class=\"docutils literal notranslate\">False</code> (the default) only the direct contents of <code class=\"docutils literal notranslate\">path</code> will be\noffered as choices. If <code class=\"docutils literal notranslate\">True</code>, the directory will be descended into\nrecursively and all descendants will be listed as choices.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.FilePathField.match\">\n<span class=\"sig-name descname\">match</span><a class=\"heading-anchor\" href=\"#django.forms.FilePathField.match\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A regular expression pattern; only files with names matching this expression\nwill be allowed as choices.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.FilePathField.allow_files\">\n<span class=\"sig-name descname\">allow_files</span><a class=\"heading-anchor\" href=\"#django.forms.FilePathField.allow_files\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Optional.  Either <code class=\"docutils literal notranslate\">True</code> or <code class=\"docutils literal notranslate\">False</code>.  Default is <code class=\"docutils literal notranslate\">True</code>.  Specifies\nwhether files in the specified location should be included.  Either this or\n<a class=\"reference internal\" href=\"#django.forms.FilePathField.allow_folders\" title=\"django.forms.FilePathField.allow_folders\"><code class=\"xref py py-attr docutils literal notranslate\">allow_folders</code></a> must be <code class=\"docutils literal notranslate\">True</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.FilePathField.allow_folders\">\n<span class=\"sig-name descname\">allow_folders</span><a class=\"heading-anchor\" href=\"#django.forms.FilePathField.allow_folders\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Optional.  Either <code class=\"docutils literal notranslate\">True</code> or <code class=\"docutils literal notranslate\">False</code>.  Default is <code class=\"docutils literal notranslate\">False</code>.  Specifies\nwhether folders in the specified location should be included.  Either this or\n<a class=\"reference internal\" href=\"#django.forms.FilePathField.allow_files\" title=\"django.forms.FilePathField.allow_files\"><code class=\"xref py py-attr docutils literal notranslate\">allow_files</code></a> must be <code class=\"docutils literal notranslate\">True</code>.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"floatfield\">\n<h3><code class=\"docutils literal notranslate\">FloatField</code><a class=\"heading-anchor\" href=\"#floatfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.FloatField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">FloatField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.FloatField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.NumberInput\" title=\"django.forms.NumberInput\"><code class=\"xref py py-class docutils literal notranslate\">NumberInput</code></a> when <a class=\"reference internal\" href=\"#django.forms.Field.localize\" title=\"django.forms.Field.localize\"><code class=\"xref py py-attr docutils literal notranslate\">Field.localize</code></a> is\n<code class=\"docutils literal notranslate\">False</code>, else <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a>.</p></li>\n<li><p>Empty value: <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Normalizes to: A Python float.</p></li>\n<li><p>Validates that the given value is a float. Uses\n<a class=\"reference internal\" href=\"/en/5.1/ref/validators/#django.core.validators.MaxValueValidator\" title=\"django.core.validators.MaxValueValidator\"><code class=\"xref py py-class docutils literal notranslate\">MaxValueValidator</code></a> and\n<a class=\"reference internal\" href=\"/en/5.1/ref/validators/#django.core.validators.MinValueValidator\" title=\"django.core.validators.MinValueValidator\"><code class=\"xref py py-class docutils literal notranslate\">MinValueValidator</code></a> if <code class=\"docutils literal notranslate\">max_value</code> and\n<code class=\"docutils literal notranslate\">min_value</code> are provided. Uses\n<a class=\"reference internal\" href=\"/en/5.1/ref/validators/#django.core.validators.StepValueValidator\" title=\"django.core.validators.StepValueValidator\"><code class=\"xref py py-class docutils literal notranslate\">StepValueValidator</code></a> if <code class=\"docutils literal notranslate\">step_size</code> is\nprovided. Leading and trailing whitespace is allowed, as in Python’s\n<code class=\"docutils literal notranslate\">float()</code> function.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code>, <code class=\"docutils literal notranslate\">max_value</code>,\n<code class=\"docutils literal notranslate\">min_value</code>, <code class=\"docutils literal notranslate\">step_size</code>.</p></li>\n</ul>\n<p>Takes three optional arguments:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.FloatField.max_value\">\n<span class=\"sig-name descname\">max_value</span><a class=\"heading-anchor\" href=\"#django.forms.FloatField.max_value\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.FloatField.min_value\">\n<span class=\"sig-name descname\">min_value</span><a class=\"heading-anchor\" href=\"#django.forms.FloatField.min_value\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>These control the range of values permitted in the field.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.FloatField.step_size\">\n<span class=\"sig-name descname\">step_size</span><a class=\"heading-anchor\" href=\"#django.forms.FloatField.step_size\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Limit valid inputs to an integral multiple of <code class=\"docutils literal notranslate\">step_size</code>. If\n<code class=\"docutils literal notranslate\">min_value</code> is also provided, it’s added as an offset to determine if\nthe step size matches.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"genericipaddressfield\">\n<h3><code class=\"docutils literal notranslate\">GenericIPAddressField</code><a class=\"heading-anchor\" href=\"#genericipaddressfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.GenericIPAddressField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">GenericIPAddressField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.GenericIPAddressField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A field containing either an IPv4 or an IPv6 address.</p>\n<ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a></p></li>\n<li><p>Empty value: <code class=\"docutils literal notranslate\">''</code> (an empty string)</p></li>\n<li><p>Normalizes to: A string. IPv6 addresses are normalized as described below.</p></li>\n<li><p>Validates that the given value is a valid IP address.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code>, <code class=\"docutils literal notranslate\">max_length</code></p></li>\n</ul>\n<p>The IPv6 address normalization follows <span class=\"target\" id=\"index-1\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc4291.html#section-2.2\"><strong>RFC 4291 Section 2.2</strong></a> section 2.2,\nincluding using the IPv4 format suggested in paragraph 3 of that section, like\n<code class=\"docutils literal notranslate\">::ffff:192.0.2.0</code>. For example, <code class=\"docutils literal notranslate\">2001:0::0:01</code> would be normalized to\n<code class=\"docutils literal notranslate\">2001::1</code>, and <code class=\"docutils literal notranslate\">::ffff:0a0a:0a0a</code> to <code class=\"docutils literal notranslate\">::ffff:10.10.10.10</code>. All characters\nare converted to lowercase.</p>\n<p>Takes three optional arguments:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.GenericIPAddressField.protocol\">\n<span class=\"sig-name descname\">protocol</span><a class=\"heading-anchor\" href=\"#django.forms.GenericIPAddressField.protocol\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Limits valid inputs to the specified protocol.\nAccepted values are <code class=\"docutils literal notranslate\">both</code> (default), <code class=\"docutils literal notranslate\">IPv4</code>\nor <code class=\"docutils literal notranslate\">IPv6</code>. Matching is case insensitive.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.GenericIPAddressField.unpack_ipv4\">\n<span class=\"sig-name descname\">unpack_ipv4</span><a class=\"heading-anchor\" href=\"#django.forms.GenericIPAddressField.unpack_ipv4\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Unpacks IPv4 mapped addresses like <code class=\"docutils literal notranslate\">::ffff:192.0.2.1</code>.\nIf this option is enabled that address would be unpacked to\n<code class=\"docutils literal notranslate\">192.0.2.1</code>. Default is disabled. Can only be used\nwhen <code class=\"docutils literal notranslate\">protocol</code> is set to <code class=\"docutils literal notranslate\">'both'</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.GenericIPAddressField.max_length\">\n<span class=\"sig-name descname\">max_length</span><a class=\"heading-anchor\" href=\"#django.forms.GenericIPAddressField.max_length\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Defaults to 39, and behaves the same way as it does for\n<a class=\"reference internal\" href=\"#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\">CharField</code></a>.</p>\n</dd></dl>\n\n<aside class=\"version-note version-changed\" data-version=\"4.2.18\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 4.2.18</p><p>The default value for <code class=\"docutils literal notranslate\">max_length</code> was set to 39 characters.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"imagefield\">\n<h3><code class=\"docutils literal notranslate\">ImageField</code><a class=\"heading-anchor\" href=\"#imagefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ImageField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ImageField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.ImageField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.ClearableFileInput\" title=\"django.forms.ClearableFileInput\"><code class=\"xref py py-class docutils literal notranslate\">ClearableFileInput</code></a></p></li>\n<li><p>Empty value: <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Normalizes to: An <code class=\"docutils literal notranslate\">UploadedFile</code> object that wraps the file content\nand file name into a single object.</p></li>\n<li><p>Validates that file data has been bound to the form. Also uses\n<a class=\"reference internal\" href=\"/en/5.1/ref/validators/#django.core.validators.FileExtensionValidator\" title=\"django.core.validators.FileExtensionValidator\"><code class=\"xref py py-class docutils literal notranslate\">FileExtensionValidator</code></a> to validate that\nthe file extension is supported by Pillow.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code>, <code class=\"docutils literal notranslate\">missing</code>, <code class=\"docutils literal notranslate\">empty</code>,\n<code class=\"docutils literal notranslate\">invalid_image</code></p></li>\n</ul>\n<p>Using an <code class=\"docutils literal notranslate\">ImageField</code> requires that <a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/pillow/\">pillow</a> is installed with\nsupport for the image formats you use. If you encounter a <code class=\"docutils literal notranslate\">corrupt image</code>\nerror when you upload an image, it usually means that Pillow doesn’t\nunderstand its format. To fix this, install the appropriate library and\nreinstall Pillow.</p>\n<p>When you use an <code class=\"docutils literal notranslate\">ImageField</code> on a form, you must also remember to\n<a class=\"reference internal\" href=\"/en/5.1/ref/forms/api/#binding-uploaded-files\"><span class=\"std std-ref\">bind the file data to the form</span></a>.</p>\n<p>After the field has been cleaned and validated, the <code class=\"docutils literal notranslate\">UploadedFile</code>\nobject will have an additional <code class=\"docutils literal notranslate\">image</code> attribute containing the Pillow\n<a class=\"reference external\" href=\"https://pillow.readthedocs.io/en/latest/reference/Image.html\">Image</a> instance used to check if the file was a valid image. Pillow\ncloses the underlying file descriptor after verifying an image, so while\nnon-image data attributes, such as <code class=\"docutils literal notranslate\">format</code>, <code class=\"docutils literal notranslate\">height</code>, and <code class=\"docutils literal notranslate\">width</code>,\nare available, methods that access the underlying image data, such as\n<code class=\"docutils literal notranslate\">getdata()</code> or <code class=\"docutils literal notranslate\">getpixel()</code>, cannot be used without reopening the file.\nFor example:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">PIL</span> <span class=\"kn\">import</span> Image\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.core.files.uploadedfile</span> <span class=\"kn\">import</span> SimpleUploadedFile\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">ImageForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    img <span class=\"o\">=</span> forms<span class=\"o\">.</span>ImageField<span class=\"p\">()</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>file_data <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;img&quot;</span><span class=\"p\">:</span> SimpleUploadedFile<span class=\"p\">(</span><span class=\"s2\">&quot;test.png&quot;</span><span class=\"p\">,</span> <span class=\"sa\">b</span><span class=\"s2\">&quot;file data&quot;</span><span class=\"p\">)}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>form <span class=\"o\">=</span> ImageForm<span class=\"p\">({},</span> file_data<span class=\"p\">)</span>\n<span class=\"go\"># Pillow closes the underlying file descriptor.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>form<span class=\"o\">.</span>is_valid<span class=\"p\">()</span>\n<span class=\"go\">True</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>image_field <span class=\"o\">=</span> form<span class=\"o\">.</span>cleaned_data<span class=\"p\">[</span><span class=\"s2\">&quot;img&quot;</span><span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>image_field<span class=\"o\">.</span>image\n<span class=\"go\">&lt;PIL.PngImagePlugin.PngImageFile image mode=RGBA size=191x287 at 0x7F5985045C18&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>image_field<span class=\"o\">.</span>image<span class=\"o\">.</span>width\n<span class=\"go\">191</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>image_field<span class=\"o\">.</span>image<span class=\"o\">.</span>height\n<span class=\"go\">287</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>image_field<span class=\"o\">.</span>image<span class=\"o\">.</span>format\n<span class=\"go\">&#39;PNG&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>image_field<span class=\"o\">.</span>image<span class=\"o\">.</span>getdata<span class=\"p\">()</span>\n<span class=\"go\"># Raises AttributeError: &#39;NoneType&#39; object has no attribute &#39;seek&#39;.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>image <span class=\"o\">=</span> Image<span class=\"o\">.</span>open<span class=\"p\">(</span>image_field<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>image<span class=\"o\">.</span>getdata<span class=\"p\">()</span>\n<span class=\"go\">&lt;ImagingCore object at 0x7f5984f874b0&gt;</span>\n</code></pre></div>\n<p>Additionally, <code class=\"docutils literal notranslate\">UploadedFile.content_type</code> will be updated with the\nimage’s content type if Pillow can determine it, otherwise it will be set\nto <code class=\"docutils literal notranslate\">None</code>.</p>\n</dd></dl>\n\n</section>\n<section id=\"integerfield\">\n<h3><code class=\"docutils literal notranslate\">IntegerField</code><a class=\"heading-anchor\" href=\"#integerfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.IntegerField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">IntegerField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.IntegerField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.NumberInput\" title=\"django.forms.NumberInput\"><code class=\"xref py py-class docutils literal notranslate\">NumberInput</code></a> when <a class=\"reference internal\" href=\"#django.forms.Field.localize\" title=\"django.forms.Field.localize\"><code class=\"xref py py-attr docutils literal notranslate\">Field.localize</code></a> is\n<code class=\"docutils literal notranslate\">False</code>, else <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a>.</p></li>\n<li><p>Empty value: <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Normalizes to: A Python integer.</p></li>\n<li><p>Validates that the given value is an integer. Uses\n<a class=\"reference internal\" href=\"/en/5.1/ref/validators/#django.core.validators.MaxValueValidator\" title=\"django.core.validators.MaxValueValidator\"><code class=\"xref py py-class docutils literal notranslate\">MaxValueValidator</code></a> and\n<a class=\"reference internal\" href=\"/en/5.1/ref/validators/#django.core.validators.MinValueValidator\" title=\"django.core.validators.MinValueValidator\"><code class=\"xref py py-class docutils literal notranslate\">MinValueValidator</code></a> if <code class=\"docutils literal notranslate\">max_value</code> and\n<code class=\"docutils literal notranslate\">min_value</code> are provided. Uses\n<a class=\"reference internal\" href=\"/en/5.1/ref/validators/#django.core.validators.StepValueValidator\" title=\"django.core.validators.StepValueValidator\"><code class=\"xref py py-class docutils literal notranslate\">StepValueValidator</code></a> if <code class=\"docutils literal notranslate\">step_size</code> is\nprovided. Leading and trailing whitespace is allowed, as in Python’s\n<code class=\"docutils literal notranslate\">int()</code> function.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code>, <code class=\"docutils literal notranslate\">max_value</code>,\n<code class=\"docutils literal notranslate\">min_value</code>, <code class=\"docutils literal notranslate\">step_size</code></p></li>\n</ul>\n<p>The <code class=\"docutils literal notranslate\">max_value</code>, <code class=\"docutils literal notranslate\">min_value</code> and <code class=\"docutils literal notranslate\">step_size</code> error messages may\ncontain <code class=\"docutils literal notranslate\">%(limit_value)s</code>, which will be substituted by the appropriate\nlimit.</p>\n<p>Takes three optional arguments for validation:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.IntegerField.max_value\">\n<span class=\"sig-name descname\">max_value</span><a class=\"heading-anchor\" href=\"#django.forms.IntegerField.max_value\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.IntegerField.min_value\">\n<span class=\"sig-name descname\">min_value</span><a class=\"heading-anchor\" href=\"#django.forms.IntegerField.min_value\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>These control the range of values permitted in the field.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.IntegerField.step_size\">\n<span class=\"sig-name descname\">step_size</span><a class=\"heading-anchor\" href=\"#django.forms.IntegerField.step_size\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Limit valid inputs to an integral multiple of <code class=\"docutils literal notranslate\">step_size</code>. If\n<code class=\"docutils literal notranslate\">min_value</code> is also provided, it’s added as an offset to determine if\nthe step size matches.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"jsonfield\">\n<h3><code class=\"docutils literal notranslate\">JSONField</code><a class=\"heading-anchor\" href=\"#jsonfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.JSONField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">JSONField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">encoder<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">decoder<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.JSONField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A field which accepts JSON encoded data for a\n<a class=\"reference internal\" href=\"/en/5.1/ref/models/fields/#django.db.models.JSONField\" title=\"django.db.models.JSONField\"><code class=\"xref py py-class docutils literal notranslate\">JSONField</code></a>.</p>\n<ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.Textarea\" title=\"django.forms.Textarea\"><code class=\"xref py py-class docutils literal notranslate\">Textarea</code></a></p></li>\n<li><p>Empty value: <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Normalizes to: A Python representation of the JSON value (usually as a\n<code class=\"docutils literal notranslate\">dict</code>, <code class=\"docutils literal notranslate\">list</code>, or <code class=\"docutils literal notranslate\">None</code>), depending on <a class=\"reference internal\" href=\"#django.forms.JSONField.decoder\" title=\"django.forms.JSONField.decoder\"><code class=\"xref py py-attr docutils literal notranslate\">JSONField.decoder</code></a>.</p></li>\n<li><p>Validates that the given value is a valid JSON.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code></p></li>\n</ul>\n<p>Takes two optional arguments:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.JSONField.encoder\">\n<span class=\"sig-name descname\">encoder</span><a class=\"heading-anchor\" href=\"#django.forms.JSONField.encoder\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A <a class=\"reference external\" href=\"https://docs.python.org/3/library/json.html#json.JSONEncoder\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">json.JSONEncoder</code></a> subclass to serialize data types not\nsupported by the standard JSON serializer (e.g. <code class=\"docutils literal notranslate\">datetime.datetime</code>\nor <a class=\"reference external\" href=\"https://docs.python.org/3/library/uuid.html#uuid.UUID\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">UUID</code></a>). For example, you can use the\n<a class=\"reference internal\" href=\"/en/5.1/topics/serialization/#django.core.serializers.json.DjangoJSONEncoder\" title=\"django.core.serializers.json.DjangoJSONEncoder\"><code class=\"xref py py-class docutils literal notranslate\">DjangoJSONEncoder</code></a> class.</p>\n<p>Defaults to <code class=\"docutils literal notranslate\">json.JSONEncoder</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.JSONField.decoder\">\n<span class=\"sig-name descname\">decoder</span><a class=\"heading-anchor\" href=\"#django.forms.JSONField.decoder\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A <a class=\"reference external\" href=\"https://docs.python.org/3/library/json.html#json.JSONDecoder\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">json.JSONDecoder</code></a> subclass to deserialize the input. Your\ndeserialization may need to account for the fact that you can’t be\ncertain of the input type. For example, you run the risk of returning a\n<code class=\"docutils literal notranslate\">datetime</code> that was actually a string that just happened to be in the\nsame format chosen for <code class=\"docutils literal notranslate\">datetime</code>s.</p>\n<p>The <code class=\"docutils literal notranslate\">decoder</code> can be used to validate the input. If\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/json.html#json.JSONDecodeError\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">json.JSONDecodeError</code></a> is raised during the deserialization,\na <code class=\"docutils literal notranslate\">ValidationError</code> will be raised.</p>\n<p>Defaults to <code class=\"docutils literal notranslate\">json.JSONDecoder</code>.</p>\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>If you use a <a class=\"reference internal\" href=\"/en/5.1/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\">ModelForm</code></a>, the\n<code class=\"docutils literal notranslate\">encoder</code> and <code class=\"docutils literal notranslate\">decoder</code> from <a class=\"reference internal\" href=\"/en/5.1/ref/models/fields/#django.db.models.JSONField\" title=\"django.db.models.JSONField\"><code class=\"xref py py-class docutils literal notranslate\">JSONField</code></a>\nwill be used.</p>\n</aside>\n<aside class=\"admonition-user-friendly-forms admonition\" role=\"note\">\n<p class=\"admonition-title\">User friendly forms</p>\n<p><code class=\"docutils literal notranslate\">JSONField</code> is not particularly user friendly in most cases. However,\nit is a useful way to format data from a client-side widget for\nsubmission to the server.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"multiplechoicefield\">\n<h3><code class=\"docutils literal notranslate\">MultipleChoiceField</code><a class=\"heading-anchor\" href=\"#multiplechoicefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.MultipleChoiceField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">MultipleChoiceField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.MultipleChoiceField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.SelectMultiple\" title=\"django.forms.SelectMultiple\"><code class=\"xref py py-class docutils literal notranslate\">SelectMultiple</code></a></p></li>\n<li><p>Empty value: <code class=\"docutils literal notranslate\">[]</code> (an empty list)</p></li>\n<li><p>Normalizes to: A list of strings.</p></li>\n<li><p>Validates that every value in the given list of values exists in the list\nof choices.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid_choice</code>, <code class=\"docutils literal notranslate\">invalid_list</code></p></li>\n</ul>\n<p>The <code class=\"docutils literal notranslate\">invalid_choice</code> error message may contain <code class=\"docutils literal notranslate\">%(value)s</code>, which will be\nreplaced with the selected choice.</p>\n<p>Takes one extra required argument, <code class=\"docutils literal notranslate\">choices</code>, as for <a class=\"reference internal\" href=\"#django.forms.ChoiceField\" title=\"django.forms.ChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">ChoiceField</code></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"nullbooleanfield\">\n<h3><code class=\"docutils literal notranslate\">NullBooleanField</code><a class=\"heading-anchor\" href=\"#nullbooleanfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.NullBooleanField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">NullBooleanField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.NullBooleanField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.NullBooleanSelect\" title=\"django.forms.NullBooleanSelect\"><code class=\"xref py py-class docutils literal notranslate\">NullBooleanSelect</code></a></p></li>\n<li><p>Empty value: <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Normalizes to: A Python <code class=\"docutils literal notranslate\">True</code>, <code class=\"docutils literal notranslate\">False</code> or <code class=\"docutils literal notranslate\">None</code> value.</p></li>\n<li><p>Validates nothing (i.e., it never raises a <code class=\"docutils literal notranslate\">ValidationError</code>).</p></li>\n</ul>\n<p><code class=\"docutils literal notranslate\">NullBooleanField</code> may be used with widgets such as\n<a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.Select\" title=\"django.forms.Select\"><code class=\"xref py py-class docutils literal notranslate\">Select</code></a> or <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.RadioSelect\" title=\"django.forms.RadioSelect\"><code class=\"xref py py-class docutils literal notranslate\">RadioSelect</code></a>\nby providing the widget <code class=\"docutils literal notranslate\">choices</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>NullBooleanField<span class=\"p\">(</span>\n    widget<span class=\"o\">=</span>Select<span class=\"p\">(</span>\n        choices<span class=\"o\">=</span><span class=\"p\">[</span>\n            <span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Unknown&quot;</span><span class=\"p\">),</span>\n            <span class=\"p\">(</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Yes&quot;</span><span class=\"p\">),</span>\n            <span class=\"p\">(</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"s2\">&quot;No&quot;</span><span class=\"p\">),</span>\n        <span class=\"p\">]</span>\n    <span class=\"p\">)</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"regexfield\">\n<h3><code class=\"docutils literal notranslate\">RegexField</code><a class=\"heading-anchor\" href=\"#regexfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.RegexField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RegexField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.RegexField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a></p></li>\n<li><p>Empty value: Whatever you’ve given as <code class=\"docutils literal notranslate\">empty_value</code>.</p></li>\n<li><p>Normalizes to: A string.</p></li>\n<li><p>Uses <a class=\"reference internal\" href=\"/en/5.1/ref/validators/#django.core.validators.RegexValidator\" title=\"django.core.validators.RegexValidator\"><code class=\"xref py py-class docutils literal notranslate\">RegexValidator</code></a> to validate that\nthe given value matches a certain regular expression.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code></p></li>\n</ul>\n<p>Takes one required argument:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.RegexField.regex\">\n<span class=\"sig-name descname\">regex</span><a class=\"heading-anchor\" href=\"#django.forms.RegexField.regex\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A regular expression specified either as a string or a compiled regular\nexpression object.</p>\n</dd></dl>\n\n<p>Also takes <code class=\"docutils literal notranslate\">max_length</code>, <code class=\"docutils literal notranslate\">min_length</code>, <code class=\"docutils literal notranslate\">strip</code>, and <code class=\"docutils literal notranslate\">empty_value</code>\nwhich work just as they do for <a class=\"reference internal\" href=\"#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\">CharField</code></a>.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.RegexField.strip\">\n<span class=\"sig-name descname\">strip</span><a class=\"heading-anchor\" href=\"#django.forms.RegexField.strip\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Defaults to <code class=\"docutils literal notranslate\">False</code>. If enabled, stripping will be applied before the\nregex validation.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"slugfield\">\n<h3><code class=\"docutils literal notranslate\">SlugField</code><a class=\"heading-anchor\" href=\"#slugfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.SlugField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">SlugField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.SlugField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a></p></li>\n<li><p>Empty value: Whatever you’ve given as <a class=\"reference internal\" href=\"#django.forms.SlugField.empty_value\" title=\"django.forms.SlugField.empty_value\"><code class=\"xref py py-attr docutils literal notranslate\">empty_value</code></a>.</p></li>\n<li><p>Normalizes to: A string.</p></li>\n<li><p>Uses <a class=\"reference internal\" href=\"/en/5.1/ref/validators/#django.core.validators.validate_slug\" title=\"django.core.validators.validate_slug\"><code class=\"xref py py-class docutils literal notranslate\">validate_slug</code></a> or\n<a class=\"reference internal\" href=\"/en/5.1/ref/validators/#django.core.validators.validate_unicode_slug\" title=\"django.core.validators.validate_unicode_slug\"><code class=\"xref py py-class docutils literal notranslate\">validate_unicode_slug</code></a> to validate that\nthe given value contains only letters, numbers, underscores, and hyphens.</p></li>\n<li><p>Error messages: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code></p></li>\n</ul>\n<p>This field is intended for use in representing a model\n<a class=\"reference internal\" href=\"/en/5.1/ref/models/fields/#django.db.models.SlugField\" title=\"django.db.models.SlugField\"><code class=\"xref py py-class docutils literal notranslate\">SlugField</code></a> in forms.</p>\n<p>Takes two optional parameters:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.SlugField.allow_unicode\">\n<span class=\"sig-name descname\">allow_unicode</span><a class=\"heading-anchor\" href=\"#django.forms.SlugField.allow_unicode\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A boolean instructing the field to accept Unicode letters in addition\nto ASCII letters. Defaults to <code class=\"docutils literal notranslate\">False</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.SlugField.empty_value\">\n<span class=\"sig-name descname\">empty_value</span><a class=\"heading-anchor\" href=\"#django.forms.SlugField.empty_value\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The value to use to represent “empty”. Defaults to an empty string.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"timefield\">\n<h3><code class=\"docutils literal notranslate\">TimeField</code><a class=\"heading-anchor\" href=\"#timefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.TimeField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TimeField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.TimeField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.TimeInput\" title=\"django.forms.TimeInput\"><code class=\"xref py py-class docutils literal notranslate\">TimeInput</code></a></p></li>\n<li><p>Empty value: <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Normalizes to: A Python <code class=\"docutils literal notranslate\">datetime.time</code> object.</p></li>\n<li><p>Validates that the given value is either a <code class=\"docutils literal notranslate\">datetime.time</code> or string\nformatted in a particular time format.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code></p></li>\n</ul>\n<p>Takes one optional argument:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.TimeField.input_formats\">\n<span class=\"sig-name descname\">input_formats</span><a class=\"heading-anchor\" href=\"#django.forms.TimeField.input_formats\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>An iterable of formats used to attempt to convert a string to a valid\n<code class=\"docutils literal notranslate\">datetime.time</code> object.</p>\n</dd></dl>\n\n<p>If no <code class=\"docutils literal notranslate\">input_formats</code> argument is provided, the default input formats are\ntaken from the active locale format <code class=\"docutils literal notranslate\">TIME_INPUT_FORMATS</code> key, or from\n<a class=\"reference internal\" href=\"/en/5.1/ref/settings/#std-setting-TIME_INPUT_FORMATS\"><code class=\"xref std std-setting docutils literal notranslate\">TIME_INPUT_FORMATS</code></a> if localization is disabled. See also\n<a class=\"reference internal\" href=\"/en/5.1/topics/i18n/formatting/\"><span class=\"doc\">format localization</span></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"typedchoicefield\">\n<h3><code class=\"docutils literal notranslate\">TypedChoiceField</code><a class=\"heading-anchor\" href=\"#typedchoicefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.TypedChoiceField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TypedChoiceField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.TypedChoiceField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Just like a <a class=\"reference internal\" href=\"#django.forms.ChoiceField\" title=\"django.forms.ChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">ChoiceField</code></a>, except <a class=\"reference internal\" href=\"#django.forms.TypedChoiceField\" title=\"django.forms.TypedChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">TypedChoiceField</code></a> takes two\nextra arguments, <a class=\"reference internal\" href=\"#django.forms.TypedChoiceField.coerce\" title=\"django.forms.TypedChoiceField.coerce\"><code class=\"xref py py-attr docutils literal notranslate\">coerce</code></a> and <a class=\"reference internal\" href=\"#django.forms.TypedChoiceField.empty_value\" title=\"django.forms.TypedChoiceField.empty_value\"><code class=\"xref py py-attr docutils literal notranslate\">empty_value</code></a>.</p>\n<ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.Select\" title=\"django.forms.Select\"><code class=\"xref py py-class docutils literal notranslate\">Select</code></a></p></li>\n<li><p>Empty value: Whatever you’ve given as <a class=\"reference internal\" href=\"#django.forms.TypedChoiceField.empty_value\" title=\"django.forms.TypedChoiceField.empty_value\"><code class=\"xref py py-attr docutils literal notranslate\">empty_value</code></a>.</p></li>\n<li><p>Normalizes to: A value of the type provided by the <a class=\"reference internal\" href=\"#django.forms.TypedChoiceField.coerce\" title=\"django.forms.TypedChoiceField.coerce\"><code class=\"xref py py-attr docutils literal notranslate\">coerce</code></a>\nargument.</p></li>\n<li><p>Validates that the given value exists in the list of choices and can be\ncoerced.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid_choice</code></p></li>\n</ul>\n<p>Takes extra arguments:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.TypedChoiceField.coerce\">\n<span class=\"sig-name descname\">coerce</span><a class=\"heading-anchor\" href=\"#django.forms.TypedChoiceField.coerce\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A function that takes one argument and returns a coerced value. Examples\ninclude the built-in <code class=\"docutils literal notranslate\">int</code>, <code class=\"docutils literal notranslate\">float</code>, <code class=\"docutils literal notranslate\">bool</code> and other types. Defaults\nto an identity function. Note that coercion happens after input\nvalidation, so it is possible to coerce to a value not present in\n<code class=\"docutils literal notranslate\">choices</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.TypedChoiceField.empty_value\">\n<span class=\"sig-name descname\">empty_value</span><a class=\"heading-anchor\" href=\"#django.forms.TypedChoiceField.empty_value\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The value to use to represent “empty.” Defaults to the empty string;\n<code class=\"docutils literal notranslate\">None</code> is another common choice here. Note that this value will not be\ncoerced by the function given in the <code class=\"docutils literal notranslate\">coerce</code> argument, so choose it\naccordingly.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"typedmultiplechoicefield\">\n<h3><code class=\"docutils literal notranslate\">TypedMultipleChoiceField</code><a class=\"heading-anchor\" href=\"#typedmultiplechoicefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.TypedMultipleChoiceField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TypedMultipleChoiceField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.TypedMultipleChoiceField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Just like a <a class=\"reference internal\" href=\"#django.forms.MultipleChoiceField\" title=\"django.forms.MultipleChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">MultipleChoiceField</code></a>, except <a class=\"reference internal\" href=\"#django.forms.TypedMultipleChoiceField\" title=\"django.forms.TypedMultipleChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">TypedMultipleChoiceField</code></a>\ntakes two extra arguments, <code class=\"docutils literal notranslate\">coerce</code> and <code class=\"docutils literal notranslate\">empty_value</code>.</p>\n<ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.SelectMultiple\" title=\"django.forms.SelectMultiple\"><code class=\"xref py py-class docutils literal notranslate\">SelectMultiple</code></a></p></li>\n<li><p>Empty value: Whatever you’ve given as <code class=\"docutils literal notranslate\">empty_value</code></p></li>\n<li><p>Normalizes to: A list of values of the type provided by the <code class=\"docutils literal notranslate\">coerce</code>\nargument.</p></li>\n<li><p>Validates that the given values exists in the list of choices and can be\ncoerced.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid_choice</code></p></li>\n</ul>\n<p>The <code class=\"docutils literal notranslate\">invalid_choice</code> error message may contain <code class=\"docutils literal notranslate\">%(value)s</code>, which will be\nreplaced with the selected choice.</p>\n<p>Takes two extra arguments, <code class=\"docutils literal notranslate\">coerce</code> and <code class=\"docutils literal notranslate\">empty_value</code>, as for\n<a class=\"reference internal\" href=\"#django.forms.TypedChoiceField\" title=\"django.forms.TypedChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">TypedChoiceField</code></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"urlfield\">\n<h3><code class=\"docutils literal notranslate\">URLField</code><a class=\"heading-anchor\" href=\"#urlfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.URLField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">URLField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.URLField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.URLInput\" title=\"django.forms.URLInput\"><code class=\"xref py py-class docutils literal notranslate\">URLInput</code></a></p></li>\n<li><p>Empty value: Whatever you’ve given as <code class=\"docutils literal notranslate\">empty_value</code>.</p></li>\n<li><p>Normalizes to: A string.</p></li>\n<li><p>Uses <a class=\"reference internal\" href=\"/en/5.1/ref/validators/#django.core.validators.URLValidator\" title=\"django.core.validators.URLValidator\"><code class=\"xref py py-class docutils literal notranslate\">URLValidator</code></a> to validate that the\ngiven value is a valid URL.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code></p></li>\n</ul>\n<p>Has the optional arguments <code class=\"docutils literal notranslate\">max_length</code>, <code class=\"docutils literal notranslate\">min_length</code>, <code class=\"docutils literal notranslate\">empty_value</code>\nwhich work just as they do for <a class=\"reference internal\" href=\"#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\">CharField</code></a>, and one more argument:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.URLField.assume_scheme\">\n<span class=\"sig-name descname\">assume_scheme</span><a class=\"heading-anchor\" href=\"#django.forms.URLField.assume_scheme\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"5.0\" role=\"note\">\n<p class=\"version-note-title\">New in Django 5.0</p></aside>\n<p>The scheme assumed for URLs provided without one. Defaults to\n<code class=\"docutils literal notranslate\">&quot;http&quot;</code>. For example, if <code class=\"docutils literal notranslate\">assume_scheme</code> is <code class=\"docutils literal notranslate\">&quot;https&quot;</code> and the\nprovided value is <code class=\"docutils literal notranslate\">&quot;example.com&quot;</code>, the normalized value will be\n<code class=\"docutils literal notranslate\">&quot;https://example.com&quot;</code>.</p>\n</dd></dl>\n\n<aside class=\"version-note version-deprecated\" data-version=\"5.0\" role=\"note\">\n<p class=\"version-note-title\">Deprecated since Django 5.0</p><p><span class=\"versionmodified deprecated\">Deprecated since version 5.0: </span>The default value for <code class=\"docutils literal notranslate\">assume_scheme</code> will change from <code class=\"docutils literal notranslate\">&quot;http&quot;</code> to\n<code class=\"docutils literal notranslate\">&quot;https&quot;</code> in Django 6.0. Set <a class=\"reference internal\" href=\"/en/5.1/ref/settings/#std-setting-FORMS_URLFIELD_ASSUME_HTTPS\"><code class=\"xref std std-setting docutils literal notranslate\">FORMS_URLFIELD_ASSUME_HTTPS</code></a>\ntransitional setting to <code class=\"docutils literal notranslate\">True</code> to opt into using <code class=\"docutils literal notranslate\">&quot;https&quot;</code> during\nthe Django 5.x release cycle.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"uuidfield\">\n<h3><code class=\"docutils literal notranslate\">UUIDField</code><a class=\"heading-anchor\" href=\"#uuidfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.UUIDField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">UUIDField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.UUIDField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a></p></li>\n<li><p>Empty value: <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Normalizes to: A <a class=\"reference external\" href=\"https://docs.python.org/3/library/uuid.html#uuid.UUID\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">UUID</code></a> object.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code></p></li>\n</ul>\n<p>This field will accept any string format accepted as the <code class=\"docutils literal notranslate\">hex</code> argument\nto the <a class=\"reference external\" href=\"https://docs.python.org/3/library/uuid.html#uuid.UUID\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">UUID</code></a> constructor.</p>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"slightly-complex-built-in-field-classes\">\n<h2>Slightly complex built-in <code class=\"docutils literal notranslate\">Field</code> classes<a class=\"heading-anchor\" href=\"#slightly-complex-built-in-field-classes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"combofield\">\n<h3><code class=\"docutils literal notranslate\">ComboField</code><a class=\"heading-anchor\" href=\"#combofield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ComboField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ComboField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.ComboField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a></p></li>\n<li><p>Empty value: <code class=\"docutils literal notranslate\">''</code> (an empty string)</p></li>\n<li><p>Normalizes to: A string.</p></li>\n<li><p>Validates the given value against each of the fields specified\nas an argument to the <code class=\"docutils literal notranslate\">ComboField</code>.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code></p></li>\n</ul>\n<p>Takes one extra required argument:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ComboField.fields\">\n<span class=\"sig-name descname\">fields</span><a class=\"heading-anchor\" href=\"#django.forms.ComboField.fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The list of fields that should be used to validate the field’s value (in\nthe order in which they are provided).</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> ComboField\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> ComboField<span class=\"p\">(</span>fields<span class=\"o\">=</span><span class=\"p\">[</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">),</span> EmailField<span class=\"p\">()])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"s2\">&quot;test@example.com&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;test@example.com&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>clean<span class=\"p\">(</span><span class=\"s2\">&quot;longemailaddress@example.com&quot;</span><span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">ValidationError</span>: [&#39;Ensure this value has at most 20 characters (it has 28).&#39;]\n</code></pre></div>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"multivaluefield\">\n<h3><code class=\"docutils literal notranslate\">MultiValueField</code><a class=\"heading-anchor\" href=\"#multivaluefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.MultiValueField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">MultiValueField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">fields<span class=\"o\">=</span><span class=\"default_value\">()</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.MultiValueField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a></p></li>\n<li><p>Empty value: <code class=\"docutils literal notranslate\">''</code> (an empty string)</p></li>\n<li><p>Normalizes to: the type returned by the <code class=\"docutils literal notranslate\">compress</code> method of the subclass.</p></li>\n<li><p>Validates the given value against each of the fields specified\nas an argument to the <code class=\"docutils literal notranslate\">MultiValueField</code>.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code>, <code class=\"docutils literal notranslate\">incomplete</code></p></li>\n</ul>\n<p>Aggregates the logic of multiple fields that together produce a single\nvalue.</p>\n<p>This field is abstract and must be subclassed. In contrast with the\nsingle-value fields, subclasses of <a class=\"reference internal\" href=\"#django.forms.MultiValueField\" title=\"django.forms.MultiValueField\"><code class=\"xref py py-class docutils literal notranslate\">MultiValueField</code></a> must not\nimplement <a class=\"reference internal\" href=\"#django.forms.Field.clean\" title=\"django.forms.Field.clean\"><code class=\"xref py py-meth docutils literal notranslate\">clean()</code></a> but instead - implement\n<a class=\"reference internal\" href=\"#django.forms.MultiValueField.compress\" title=\"django.forms.MultiValueField.compress\"><code class=\"xref py py-meth docutils literal notranslate\">compress()</code></a>.</p>\n<p>Takes one extra required argument:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.MultiValueField.fields\">\n<span class=\"sig-name descname\">fields</span><a class=\"heading-anchor\" href=\"#django.forms.MultiValueField.fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A tuple of fields whose values are cleaned and subsequently combined\ninto a single value.  Each value of the field is cleaned by the\ncorresponding field in <code class=\"docutils literal notranslate\">fields</code> – the first value is cleaned by the\nfirst field, the second value is cleaned by the second field, etc.\nOnce all fields are cleaned, the list of clean values is combined into\na single value by <a class=\"reference internal\" href=\"#django.forms.MultiValueField.compress\" title=\"django.forms.MultiValueField.compress\"><code class=\"xref py py-meth docutils literal notranslate\">compress()</code></a>.</p>\n</dd></dl>\n\n<p>Also takes some optional arguments:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.MultiValueField.require_all_fields\">\n<span class=\"sig-name descname\">require_all_fields</span><a class=\"heading-anchor\" href=\"#django.forms.MultiValueField.require_all_fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Defaults to <code class=\"docutils literal notranslate\">True</code>, in which case a <code class=\"docutils literal notranslate\">required</code> validation error\nwill be raised if no value is supplied for any field.</p>\n<p>When set to <code class=\"docutils literal notranslate\">False</code>, the <a class=\"reference internal\" href=\"#django.forms.Field.required\" title=\"django.forms.Field.required\"><code class=\"xref py py-attr docutils literal notranslate\">Field.required</code></a> attribute can be set\nto <code class=\"docutils literal notranslate\">False</code> for individual fields to make them optional. If no value\nis supplied for a required field, an <code class=\"docutils literal notranslate\">incomplete</code> validation error\nwill be raised.</p>\n<p>A default <code class=\"docutils literal notranslate\">incomplete</code> error message can be defined on the\n<a class=\"reference internal\" href=\"#django.forms.MultiValueField\" title=\"django.forms.MultiValueField\"><code class=\"xref py py-class docutils literal notranslate\">MultiValueField</code></a> subclass, or different messages can be defined\non each individual field. For example:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.core.validators</span> <span class=\"kn\">import</span> RegexValidator\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PhoneField</span><span class=\"p\">(</span>MultiValueField<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        <span class=\"c1\"># Define one message for all fields.</span>\n        error_messages <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;incomplete&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Enter a country calling code and a phone number.&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"c1\"># Or define a different message for each field.</span>\n        fields <span class=\"o\">=</span> <span class=\"p\">(</span>\n            CharField<span class=\"p\">(</span>\n                error_messages<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;incomplete&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Enter a country calling code.&quot;</span><span class=\"p\">},</span>\n                validators<span class=\"o\">=</span><span class=\"p\">[</span>\n                    RegexValidator<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^[0-9]+$&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Enter a valid country calling code.&quot;</span><span class=\"p\">),</span>\n                <span class=\"p\">],</span>\n            <span class=\"p\">),</span>\n            CharField<span class=\"p\">(</span>\n                error_messages<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;incomplete&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Enter a phone number.&quot;</span><span class=\"p\">},</span>\n                validators<span class=\"o\">=</span><span class=\"p\">[</span>RegexValidator<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^[0-9]+$&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Enter a valid phone number.&quot;</span><span class=\"p\">)],</span>\n            <span class=\"p\">),</span>\n            CharField<span class=\"p\">(</span>\n                validators<span class=\"o\">=</span><span class=\"p\">[</span>RegexValidator<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^[0-9]+$&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Enter a valid extension.&quot;</span><span class=\"p\">)],</span>\n                required<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n            <span class=\"p\">),</span>\n        <span class=\"p\">)</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            error_messages<span class=\"o\">=</span>error_messages<span class=\"p\">,</span>\n            fields<span class=\"o\">=</span>fields<span class=\"p\">,</span>\n            require_all_fields<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n            <span class=\"o\">**</span>kwargs\n        <span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.MultiValueField.widget\">\n<span class=\"sig-name descname\">widget</span><a class=\"heading-anchor\" href=\"#django.forms.MultiValueField.widget\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Must be a subclass of <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.MultiWidget\" title=\"django.forms.MultiWidget\"><code class=\"xref py py-class docutils literal notranslate\">django.forms.MultiWidget</code></a>.\nDefault value is <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\">TextInput</code></a>, which\nprobably is not very useful in this case.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.MultiValueField.compress\">\n<span class=\"sig-name descname\">compress</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_list</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.MultiValueField.compress\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Takes a list of valid values and returns  a “compressed” version of\nthose values – in a single value. For example,\n<a class=\"reference internal\" href=\"#django.forms.SplitDateTimeField\" title=\"django.forms.SplitDateTimeField\"><code class=\"xref py py-class docutils literal notranslate\">SplitDateTimeField</code></a> is a subclass which combines a time field\nand a date field into a <code class=\"docutils literal notranslate\">datetime</code> object.</p>\n<p>This method must be implemented in the subclasses.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"splitdatetimefield\">\n<h3><code class=\"docutils literal notranslate\">SplitDateTimeField</code><a class=\"heading-anchor\" href=\"#splitdatetimefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.SplitDateTimeField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">SplitDateTimeField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.SplitDateTimeField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.SplitDateTimeWidget\" title=\"django.forms.SplitDateTimeWidget\"><code class=\"xref py py-class docutils literal notranslate\">SplitDateTimeWidget</code></a></p></li>\n<li><p>Empty value: <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Normalizes to: A Python <code class=\"docutils literal notranslate\">datetime.datetime</code> object.</p></li>\n<li><p>Validates that the given value is a <code class=\"docutils literal notranslate\">datetime.datetime</code> or string\nformatted in a particular datetime format.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid</code>, <code class=\"docutils literal notranslate\">invalid_date</code>,\n<code class=\"docutils literal notranslate\">invalid_time</code></p></li>\n</ul>\n<p>Takes two optional arguments:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.SplitDateTimeField.input_date_formats\">\n<span class=\"sig-name descname\">input_date_formats</span><a class=\"heading-anchor\" href=\"#django.forms.SplitDateTimeField.input_date_formats\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A list of formats used to attempt to convert a string to a valid\n<code class=\"docutils literal notranslate\">datetime.date</code> object.</p>\n</dd></dl>\n\n<p>If no <code class=\"docutils literal notranslate\">input_date_formats</code> argument is provided, the default input formats\nfor <a class=\"reference internal\" href=\"#django.forms.DateField\" title=\"django.forms.DateField\"><code class=\"xref py py-class docutils literal notranslate\">DateField</code></a> are used.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.SplitDateTimeField.input_time_formats\">\n<span class=\"sig-name descname\">input_time_formats</span><a class=\"heading-anchor\" href=\"#django.forms.SplitDateTimeField.input_time_formats\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A list of formats used to attempt to convert a string to a valid\n<code class=\"docutils literal notranslate\">datetime.time</code> object.</p>\n</dd></dl>\n\n<p>If no <code class=\"docutils literal notranslate\">input_time_formats</code> argument is provided, the default input formats\nfor <a class=\"reference internal\" href=\"#django.forms.TimeField\" title=\"django.forms.TimeField\"><code class=\"xref py py-class docutils literal notranslate\">TimeField</code></a> are used.</p>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"fields-which-handle-relationships\">\n<span id=\"id2\"></span><h2>Fields which handle relationships<a class=\"heading-anchor\" href=\"#fields-which-handle-relationships\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Two fields are available for representing relationships between\nmodels: <a class=\"reference internal\" href=\"#django.forms.ModelChoiceField\" title=\"django.forms.ModelChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceField</code></a> and\n<a class=\"reference internal\" href=\"#django.forms.ModelMultipleChoiceField\" title=\"django.forms.ModelMultipleChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">ModelMultipleChoiceField</code></a>.  Both of these fields require a\nsingle <code class=\"docutils literal notranslate\">queryset</code> parameter that is used to create the choices for\nthe field.  Upon form validation, these fields will place either one\nmodel object (in the case of <code class=\"docutils literal notranslate\">ModelChoiceField</code>) or multiple model\nobjects (in the case of <code class=\"docutils literal notranslate\">ModelMultipleChoiceField</code>) into the\n<code class=\"docutils literal notranslate\">cleaned_data</code> dictionary of the form.</p>\n<p>For more complex uses, you can specify <code class=\"docutils literal notranslate\">queryset=None</code> when declaring the\nform field and then populate the <code class=\"docutils literal notranslate\">queryset</code> in the form’s <code class=\"docutils literal notranslate\">__init__()</code>\nmethod:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">FooMultipleChoiceForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n    foo_select <span class=\"o\">=</span> forms<span class=\"o\">.</span>ModelMultipleChoiceField<span class=\"p\">(</span>queryset<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>fields<span class=\"p\">[</span><span class=\"s2\">&quot;foo_select&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span>queryset <span class=\"o\">=</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p>Both <code class=\"docutils literal notranslate\">ModelChoiceField</code> and <code class=\"docutils literal notranslate\">ModelMultipleChoiceField</code> have an <code class=\"docutils literal notranslate\">iterator</code>\nattribute which specifies the class used to iterate over the queryset when\ngenerating choices. See <a class=\"reference internal\" href=\"#iterating-relationship-choices\"><span class=\"std std-ref\">Iterating relationship choices</span></a> for details.</p>\n<section id=\"modelchoicefield\">\n<h3><code class=\"docutils literal notranslate\">ModelChoiceField</code><a class=\"heading-anchor\" href=\"#modelchoicefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ModelChoiceField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.Select\" title=\"django.forms.Select\"><code class=\"xref py py-class docutils literal notranslate\">Select</code></a></p></li>\n<li><p>Empty value: <code class=\"docutils literal notranslate\">None</code></p></li>\n<li><p>Normalizes to: A model instance.</p></li>\n<li><p>Validates that the given id exists in the queryset.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid_choice</code></p></li>\n</ul>\n<p>The <code class=\"docutils literal notranslate\">invalid_choice</code> error message may contain <code class=\"docutils literal notranslate\">%(value)s</code>, which will\nbe replaced with the selected choice.</p>\n<p>Allows the selection of a single model object, suitable for representing a\nforeign key. Note that the default widget for <code class=\"docutils literal notranslate\">ModelChoiceField</code> becomes\nimpractical when the number of entries increases. You should avoid using it\nfor more than 100 items.</p>\n<p>A single argument is required:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceField.queryset\">\n<span class=\"sig-name descname\">queryset</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceField.queryset\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A <code class=\"docutils literal notranslate\">QuerySet</code> of model objects from which the choices for the field\nare derived and which is used to validate the user’s selection. It’s\nevaluated when the form is rendered.</p>\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\">ModelChoiceField</code> also takes several optional arguments:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceField.empty_label\">\n<span class=\"sig-name descname\">empty_label</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceField.empty_label\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>By default the <code class=\"docutils literal notranslate\">&lt;select&gt;</code> widget used by <code class=\"docutils literal notranslate\">ModelChoiceField</code> will have an\nempty choice at the top of the list. You can change the text of this\nlabel (which is <code class=\"docutils literal notranslate\">&quot;---------&quot;</code> by default) with the <code class=\"docutils literal notranslate\">empty_label</code>\nattribute, or you can disable the empty label entirely by setting\n<code class=\"docutils literal notranslate\">empty_label</code> to <code class=\"docutils literal notranslate\">None</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># A custom empty label</span>\nfield1 <span class=\"o\">=</span> forms<span class=\"o\">.</span>ModelChoiceField<span class=\"p\">(</span>queryset<span class=\"o\">=...</span><span class=\"p\">,</span> empty_label<span class=\"o\">=</span><span class=\"s2\">&quot;(Nothing)&quot;</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># No empty label</span>\nfield2 <span class=\"o\">=</span> forms<span class=\"o\">.</span>ModelChoiceField<span class=\"p\">(</span>queryset<span class=\"o\">=...</span><span class=\"p\">,</span> empty_label<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Note that no empty choice is created (regardless of the value of\n<code class=\"docutils literal notranslate\">empty_label</code>) if a <code class=\"docutils literal notranslate\">ModelChoiceField</code> is required and has a\ndefault initial value, or a <code class=\"docutils literal notranslate\">widget</code> is set to\n<a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.RadioSelect\" title=\"django.forms.RadioSelect\"><code class=\"xref py py-class docutils literal notranslate\">RadioSelect</code></a> and the\n<a class=\"reference internal\" href=\"#django.forms.ModelChoiceField.blank\" title=\"django.forms.ModelChoiceField.blank\"><code class=\"xref py py-attr docutils literal notranslate\">blank</code></a> argument is <code class=\"docutils literal notranslate\">False</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceField.to_field_name\">\n<span class=\"sig-name descname\">to_field_name</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceField.to_field_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>This optional argument is used to specify the field to use as the value\nof the choices in the field’s widget. Be sure it’s a unique field for\nthe model, otherwise the selected value could match more than one\nobject. By default it is set to <code class=\"docutils literal notranslate\">None</code>, in which case the primary key\nof each object will be used. For example:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># No custom to_field_name</span>\nfield1 <span class=\"o\">=</span> forms<span class=\"o\">.</span>ModelChoiceField<span class=\"p\">(</span>queryset<span class=\"o\">=...</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>would yield:</p>\n<div class=\"code-block\" data-language=\"html\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Html</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Html code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">select</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_field1&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;field1&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">option</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;obj1.pk&quot;</span><span class=\"p\">&gt;</span>Object1<span class=\"p\">&lt;/</span><span class=\"nt\">option</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">option</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;obj2.pk&quot;</span><span class=\"p\">&gt;</span>Object2<span class=\"p\">&lt;/</span><span class=\"nt\">option</span><span class=\"p\">&gt;</span>\n...\n<span class=\"p\">&lt;/</span><span class=\"nt\">select</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>and:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># to_field_name provided</span>\nfield2 <span class=\"o\">=</span> forms<span class=\"o\">.</span>ModelChoiceField<span class=\"p\">(</span>queryset<span class=\"o\">=...</span><span class=\"p\">,</span> to_field_name<span class=\"o\">=</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>would yield:</p>\n<div class=\"code-block\" data-language=\"html\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Html</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Html code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">select</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_field2&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;field2&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">option</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;obj1.name&quot;</span><span class=\"p\">&gt;</span>Object1<span class=\"p\">&lt;/</span><span class=\"nt\">option</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">option</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;obj2.name&quot;</span><span class=\"p\">&gt;</span>Object2<span class=\"p\">&lt;/</span><span class=\"nt\">option</span><span class=\"p\">&gt;</span>\n...\n<span class=\"p\">&lt;/</span><span class=\"nt\">select</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceField.blank\">\n<span class=\"sig-name descname\">blank</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceField.blank\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>When using the <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.RadioSelect\" title=\"django.forms.RadioSelect\"><code class=\"xref py py-class docutils literal notranslate\">RadioSelect</code></a> widget, this optional\nboolean argument determines whether an empty choice is created. By\ndefault, <code class=\"docutils literal notranslate\">blank</code> is <code class=\"docutils literal notranslate\">False</code>, in which case no empty choice is\ncreated.</p>\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\">ModelChoiceField</code> also has the attribute:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceField.iterator\">\n<span class=\"sig-name descname\">iterator</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceField.iterator\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The iterator class used to generate field choices from <code class=\"docutils literal notranslate\">queryset</code>. By\ndefault, <a class=\"reference internal\" href=\"#django.forms.ModelChoiceIterator\" title=\"django.forms.ModelChoiceIterator\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceIterator</code></a>.</p>\n</dd></dl>\n\n<p>The <code class=\"docutils literal notranslate\">__str__()</code> method of the model will be called to generate string\nrepresentations of the objects for use in the field’s choices. To provide\ncustomized representations, subclass <code class=\"docutils literal notranslate\">ModelChoiceField</code> and override\n<code class=\"docutils literal notranslate\">label_from_instance</code>. This method will receive a model object and should\nreturn a string suitable for representing it. For example:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> ModelChoiceField\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyModelChoiceField</span><span class=\"p\">(</span>ModelChoiceField<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">label_from_instance</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> obj<span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;My Object #</span><span class=\"si\">%i</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> obj<span class=\"o\">.</span>id\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"modelmultiplechoicefield\">\n<h3><code class=\"docutils literal notranslate\">ModelMultipleChoiceField</code><a class=\"heading-anchor\" href=\"#modelmultiplechoicefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelMultipleChoiceField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ModelMultipleChoiceField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.ModelMultipleChoiceField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><ul class=\"simple\">\n<li><p>Default widget: <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.SelectMultiple\" title=\"django.forms.SelectMultiple\"><code class=\"xref py py-class docutils literal notranslate\">SelectMultiple</code></a></p></li>\n<li><p>Empty value: An empty <code class=\"docutils literal notranslate\">QuerySet</code> (<code class=\"docutils literal notranslate\">self.queryset.none()</code>)</p></li>\n<li><p>Normalizes to: A <code class=\"docutils literal notranslate\">QuerySet</code> of model instances.</p></li>\n<li><p>Validates that every id in the given list of values exists in the\nqueryset.</p></li>\n<li><p>Error message keys: <code class=\"docutils literal notranslate\">required</code>, <code class=\"docutils literal notranslate\">invalid_list</code>, <code class=\"docutils literal notranslate\">invalid_choice</code>,\n<code class=\"docutils literal notranslate\">invalid_pk_value</code></p></li>\n</ul>\n<p>The <code class=\"docutils literal notranslate\">invalid_choice</code> message may contain <code class=\"docutils literal notranslate\">%(value)s</code> and the\n<code class=\"docutils literal notranslate\">invalid_pk_value</code> message may contain <code class=\"docutils literal notranslate\">%(pk)s</code>, which will be\nsubstituted by the appropriate values.</p>\n<p>Allows the selection of one or more model objects, suitable for\nrepresenting a many-to-many relation. As with <a class=\"reference internal\" href=\"#django.forms.ModelChoiceField\" title=\"django.forms.ModelChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceField</code></a>,\nyou can use <code class=\"docutils literal notranslate\">label_from_instance</code> to customize the object\nrepresentations.</p>\n<p>A single argument is required:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelMultipleChoiceField.queryset\">\n<span class=\"sig-name descname\">queryset</span><a class=\"heading-anchor\" href=\"#django.forms.ModelMultipleChoiceField.queryset\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Same as <a class=\"reference internal\" href=\"#django.forms.ModelChoiceField.queryset\" title=\"django.forms.ModelChoiceField.queryset\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceField.queryset</code></a>.</p>\n</dd></dl>\n\n<p>Takes one optional argument:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelMultipleChoiceField.to_field_name\">\n<span class=\"sig-name descname\">to_field_name</span><a class=\"heading-anchor\" href=\"#django.forms.ModelMultipleChoiceField.to_field_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Same as <a class=\"reference internal\" href=\"#django.forms.ModelChoiceField.to_field_name\" title=\"django.forms.ModelChoiceField.to_field_name\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceField.to_field_name</code></a>.</p>\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\">ModelMultipleChoiceField</code> also has the attribute:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelMultipleChoiceField.iterator\">\n<span class=\"sig-name descname\">iterator</span><a class=\"heading-anchor\" href=\"#django.forms.ModelMultipleChoiceField.iterator\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Same as <a class=\"reference internal\" href=\"#django.forms.ModelChoiceField.iterator\" title=\"django.forms.ModelChoiceField.iterator\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceField.iterator</code></a>.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"iterating-relationship-choices\">\n<span id=\"id3\"></span><h3>Iterating relationship choices<a class=\"heading-anchor\" href=\"#iterating-relationship-choices\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>By default, <a class=\"reference internal\" href=\"#django.forms.ModelChoiceField\" title=\"django.forms.ModelChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceField</code></a> and <a class=\"reference internal\" href=\"#django.forms.ModelMultipleChoiceField\" title=\"django.forms.ModelMultipleChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">ModelMultipleChoiceField</code></a> use\n<a class=\"reference internal\" href=\"#django.forms.ModelChoiceIterator\" title=\"django.forms.ModelChoiceIterator\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceIterator</code></a> to generate their field <code class=\"docutils literal notranslate\">choices</code>.</p>\n<p>When iterated, <code class=\"docutils literal notranslate\">ModelChoiceIterator</code> yields 2-tuple choices containing\n<a class=\"reference internal\" href=\"#django.forms.ModelChoiceIteratorValue\" title=\"django.forms.ModelChoiceIteratorValue\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceIteratorValue</code></a> instances as the first <code class=\"docutils literal notranslate\">value</code> element in\neach choice. <code class=\"docutils literal notranslate\">ModelChoiceIteratorValue</code> wraps the choice value while\nmaintaining a reference to the source model instance that can be used in custom\nwidget implementations, for example, to add <a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/data-*\">data-* attributes</a> to\n<code class=\"docutils literal notranslate\">&lt;option&gt;</code> elements.</p>\n<p>For example, consider the following models:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Topping</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    price <span class=\"o\">=</span> models<span class=\"o\">.</span>DecimalField<span class=\"p\">(</span>decimal_places<span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> max_digits<span class=\"o\">=</span><span class=\"mi\">6</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>name\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Pizza</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    topping <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>Topping<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n</code></pre></div>\n<p>You can use a <a class=\"reference internal\" href=\"/en/5.1/ref/forms/widgets/#django.forms.Select\" title=\"django.forms.Select\"><code class=\"xref py py-class docutils literal notranslate\">Select</code></a> widget subclass to include\nthe value of <code class=\"docutils literal notranslate\">Topping.price</code> as the HTML attribute <code class=\"docutils literal notranslate\">data-price</code> for each\n<code class=\"docutils literal notranslate\">&lt;option&gt;</code> element:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n\n\n<span class=\"k\">class</span> <span class=\"nc\">ToppingSelect</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Select<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">create_option</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span> name<span class=\"p\">,</span> value<span class=\"p\">,</span> label<span class=\"p\">,</span> selected<span class=\"p\">,</span> index<span class=\"p\">,</span> subindex<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> attrs<span class=\"o\">=</span><span class=\"kc\">None</span>\n    <span class=\"p\">):</span>\n        option <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>create_option<span class=\"p\">(</span>\n            name<span class=\"p\">,</span> value<span class=\"p\">,</span> label<span class=\"p\">,</span> selected<span class=\"p\">,</span> index<span class=\"p\">,</span> subindex<span class=\"p\">,</span> attrs\n        <span class=\"p\">)</span>\n        <span class=\"k\">if</span> value<span class=\"p\">:</span>\n            option<span class=\"p\">[</span><span class=\"s2\">&quot;attrs&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;data-price&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> value<span class=\"o\">.</span>instance<span class=\"o\">.</span>price\n        <span class=\"k\">return</span> option\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PizzaForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>ModelForm<span class=\"p\">):</span>\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        model <span class=\"o\">=</span> Pizza\n        fields <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;topping&quot;</span><span class=\"p\">]</span>\n        widgets <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;topping&quot;</span><span class=\"p\">:</span> ToppingSelect<span class=\"p\">}</span>\n</code></pre></div>\n<p>This will render the <code class=\"docutils literal notranslate\">Pizza.topping</code> select as:</p>\n<div class=\"code-block\" data-language=\"html\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Html</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Html code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">select</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_topping&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;topping&quot;</span> <span class=\"na\">required</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">option</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;&quot;</span> <span class=\"na\">selected</span><span class=\"p\">&gt;</span>---------<span class=\"p\">&lt;/</span><span class=\"nt\">option</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">option</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;1&quot;</span> <span class=\"na\">data-price</span><span class=\"o\">=</span><span class=\"s\">&quot;1.50&quot;</span><span class=\"p\">&gt;</span>mushrooms<span class=\"p\">&lt;/</span><span class=\"nt\">option</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">option</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;2&quot;</span> <span class=\"na\">data-price</span><span class=\"o\">=</span><span class=\"s\">&quot;1.25&quot;</span><span class=\"p\">&gt;</span>onions<span class=\"p\">&lt;/</span><span class=\"nt\">option</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">option</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;3&quot;</span> <span class=\"na\">data-price</span><span class=\"o\">=</span><span class=\"s\">&quot;1.75&quot;</span><span class=\"p\">&gt;</span>peppers<span class=\"p\">&lt;/</span><span class=\"nt\">option</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">option</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;4&quot;</span> <span class=\"na\">data-price</span><span class=\"o\">=</span><span class=\"s\">&quot;2.00&quot;</span><span class=\"p\">&gt;</span>pineapple<span class=\"p\">&lt;/</span><span class=\"nt\">option</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">select</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>For more advanced usage you may subclass <code class=\"docutils literal notranslate\">ModelChoiceIterator</code> in order to\ncustomize the yielded 2-tuple choices.</p>\n<section id=\"modelchoiceiterator\">\n<h4><code class=\"docutils literal notranslate\">ModelChoiceIterator</code><a class=\"heading-anchor\" href=\"#modelchoiceiterator\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceIterator\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ModelChoiceIterator</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">field</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceIterator\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The default class assigned to the <code class=\"docutils literal notranslate\">iterator</code> attribute of\n<a class=\"reference internal\" href=\"#django.forms.ModelChoiceField\" title=\"django.forms.ModelChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceField</code></a> and <a class=\"reference internal\" href=\"#django.forms.ModelMultipleChoiceField\" title=\"django.forms.ModelMultipleChoiceField\"><code class=\"xref py py-class docutils literal notranslate\">ModelMultipleChoiceField</code></a>. An\niterable that yields 2-tuple choices from the queryset.</p>\n<p>A single argument is required:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceIterator.field\">\n<span class=\"sig-name descname\">field</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceIterator.field\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The instance of <code class=\"docutils literal notranslate\">ModelChoiceField</code> or <code class=\"docutils literal notranslate\">ModelMultipleChoiceField</code> to\niterate and yield choices.</p>\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\">ModelChoiceIterator</code> has the following method:</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceIterator.__iter__\">\n<span class=\"sig-name descname\">__iter__</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceIterator.__iter__\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Yields 2-tuple choices, in the <code class=\"docutils literal notranslate\">(value, label)</code> format used by\n<a class=\"reference internal\" href=\"#django.forms.ChoiceField.choices\" title=\"django.forms.ChoiceField.choices\"><code class=\"xref py py-attr docutils literal notranslate\">ChoiceField.choices</code></a>. The first <code class=\"docutils literal notranslate\">value</code> element is a\n<a class=\"reference internal\" href=\"#django.forms.ModelChoiceIteratorValue\" title=\"django.forms.ModelChoiceIteratorValue\"><code class=\"xref py py-class docutils literal notranslate\">ModelChoiceIteratorValue</code></a> instance.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"modelchoiceiteratorvalue\">\n<h4><code class=\"docutils literal notranslate\">ModelChoiceIteratorValue</code><a class=\"heading-anchor\" href=\"#modelchoiceiteratorvalue\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceIteratorValue\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ModelChoiceIteratorValue</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">value</em>, <em class=\"sig-param\">instance</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceIteratorValue\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Two arguments are required:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceIteratorValue.value\">\n<span class=\"sig-name descname\">value</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceIteratorValue.value\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The value of the choice. This value is used to render the <code class=\"docutils literal notranslate\">value</code>\nattribute of an HTML <code class=\"docutils literal notranslate\">&lt;option&gt;</code> element.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceIteratorValue.instance\">\n<span class=\"sig-name descname\">instance</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceIteratorValue.instance\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The model instance from the queryset. The instance can be accessed in\ncustom <code class=\"docutils literal notranslate\">ChoiceWidget.create_option()</code> implementations to adjust the\nrendered HTML.</p>\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\">ModelChoiceIteratorValue</code> has the following method:</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelChoiceIteratorValue.__str__\">\n<span class=\"sig-name descname\">__str__</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.ModelChoiceIteratorValue.__str__\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Return <code class=\"docutils literal notranslate\">value</code> as a string to be rendered in HTML.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n</section>\n</section>\n<section id=\"creating-custom-fields\">\n<h2>Creating custom fields<a class=\"heading-anchor\" href=\"#creating-custom-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>If the built-in <code class=\"docutils literal notranslate\">Field</code> classes don’t meet your needs, you can create custom\n<code class=\"docutils literal notranslate\">Field</code> classes. To do this, create a subclass of <code class=\"docutils literal notranslate\">django.forms.Field</code>. Its\nonly requirements are that it implement a <code class=\"docutils literal notranslate\">clean()</code> method and that its\n<code class=\"docutils literal notranslate\">__init__()</code> method accept the core arguments mentioned above (<code class=\"docutils literal notranslate\">required</code>,\n<code class=\"docutils literal notranslate\">label</code>, <code class=\"docutils literal notranslate\">initial</code>, <code class=\"docutils literal notranslate\">widget</code>, <code class=\"docutils literal notranslate\">help_text</code>).</p>\n<p>You can also customize how a field will be accessed by overriding\n<a class=\"reference internal\" href=\"/en/5.1/ref/forms/api/#django.forms.Field.get_bound_field\" title=\"django.forms.Field.get_bound_field\"><code class=\"xref py py-meth docutils literal notranslate\">get_bound_field()</code></a>.</p>\n</section>","rootId":"module-django.forms.fields","toc":[{"title":"Core field arguments","anchor":"core-field-arguments","children":[{"title":"required","anchor":"required","children":[]},{"title":"label","anchor":"label","children":[]},{"title":"label_suffix","anchor":"label-suffix","children":[]},{"title":"initial","anchor":"initial","children":[]},{"title":"widget","anchor":"widget","children":[]},{"title":"help_text","anchor":"help-text","children":[]},{"title":"error_messages","anchor":"error-messages","children":[]},{"title":"validators","anchor":"validators","children":[]},{"title":"localize","anchor":"localize","children":[]},{"title":"disabled","anchor":"disabled","children":[]},{"title":"template_name","anchor":"template-name","children":[]}]},{"title":"Checking if the field data has changed","anchor":"checking-if-the-field-data-has-changed","children":[{"title":"has_changed()","anchor":"has-changed","children":[]}]},{"title":"Built-in Field classes","anchor":"built-in-field-classes","children":[{"title":"BooleanField","anchor":"booleanfield","children":[]},{"title":"CharField","anchor":"charfield","children":[]},{"title":"ChoiceField","anchor":"choicefield","children":[]},{"title":"DateField","anchor":"datefield","children":[]},{"title":"DateTimeField","anchor":"datetimefield","children":[]},{"title":"DecimalField","anchor":"decimalfield","children":[]},{"title":"DurationField","anchor":"durationfield","children":[]},{"title":"EmailField","anchor":"emailfield","children":[]},{"title":"FileField","anchor":"filefield","children":[]},{"title":"FilePathField","anchor":"filepathfield","children":[]},{"title":"FloatField","anchor":"floatfield","children":[]},{"title":"GenericIPAddressField","anchor":"genericipaddressfield","children":[]},{"title":"ImageField","anchor":"imagefield","children":[]},{"title":"IntegerField","anchor":"integerfield","children":[]},{"title":"JSONField","anchor":"jsonfield","children":[]},{"title":"MultipleChoiceField","anchor":"multiplechoicefield","children":[]},{"title":"NullBooleanField","anchor":"nullbooleanfield","children":[]},{"title":"RegexField","anchor":"regexfield","children":[]},{"title":"SlugField","anchor":"slugfield","children":[]},{"title":"TimeField","anchor":"timefield","children":[]},{"title":"TypedChoiceField","anchor":"typedchoicefield","children":[]},{"title":"TypedMultipleChoiceField","anchor":"typedmultiplechoicefield","children":[]},{"title":"URLField","anchor":"urlfield","children":[]},{"title":"UUIDField","anchor":"uuidfield","children":[]}]},{"title":"Slightly complex built-in Field classes","anchor":"slightly-complex-built-in-field-classes","children":[{"title":"ComboField","anchor":"combofield","children":[]},{"title":"MultiValueField","anchor":"multivaluefield","children":[]},{"title":"SplitDateTimeField","anchor":"splitdatetimefield","children":[]}]},{"title":"Fields which handle relationships","anchor":"fields-which-handle-relationships","children":[{"title":"ModelChoiceField","anchor":"modelchoicefield","children":[]},{"title":"ModelMultipleChoiceField","anchor":"modelmultiplechoicefield","children":[]},{"title":"Iterating relationship choices","anchor":"iterating-relationship-choices","children":[{"title":"ModelChoiceIterator","anchor":"modelchoiceiterator","children":[]},{"title":"ModelChoiceIteratorValue","anchor":"modelchoiceiteratorvalue","children":[]}]}]},{"title":"Creating custom fields","anchor":"creating-custom-fields","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API Reference","url":"/en/5.1/ref/"},{"docname":"ref/forms/index","title":"Forms","url":"/en/5.1/ref/forms/"}],"prev":{"docname":"ref/forms/api","title":"The Forms API","url":"/en/5.1/ref/forms/api/"},"next":{"docname":"ref/forms/models","title":"Model Form Functions","url":"/en/5.1/ref/forms/models/"},"formats":{"html":"/en/5.1/ref/forms/fields/","markdown":"/en/5.1/ref/forms/fields.md","json":"/en/5.1/ref/forms/fields.json"},"source":"https://github.com/django/django/blob/stable/5.1.x/docs/ref/forms/fields.txt","official":"https://docs.djangoproject.com/en/5.1/ref/forms/fields/","inVersions":["dev","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","1.8"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}