{"title":"The Forms API","version":"1.8","locale":"en","docname":"ref/forms/api","url":"/en/1.8/ref/forms/api/","canonical":"https://djangodocs.dev/en/1.8/ref/forms/api/","summary":"About this document This document covers the gritty details of Django’s forms API. You should read the introduction to working with forms first. Bound and unbound…","html":"<span id=\"the-forms-api\"></span><h1>The Forms API<a class=\"heading-anchor\" href=\"#module-django.forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<aside class=\"admonition-about-this-document admonition\">\n<p class=\"admonition-title\">About this document</p>\n<p>This document covers the gritty details of Django’s forms API. You should\nread the <a class=\"reference internal\" href=\"/en/1.8/topics/forms/\"><span class=\"doc\">introduction to working with forms</span></a>\nfirst.</p>\n</aside>\n<section id=\"bound-and-unbound-forms\">\n<span id=\"ref-forms-api-bound-unbound\"></span><h2>Bound and unbound forms<a class=\"heading-anchor\" href=\"#bound-and-unbound-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>A <a class=\"reference internal\" href=\"#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> instance is either <strong>bound</strong> to a set of data, or <strong>unbound</strong>.</p>\n<ul class=\"simple\">\n<li><p>If it’s <strong>bound</strong> to a set of data, it’s capable of validating that data\nand rendering the form as HTML with the data displayed in the HTML.</p></li>\n<li><p>If it’s <strong>unbound</strong>, it cannot do validation (because there’s no data to\nvalidate!), but it can still render the blank form as HTML.</p></li>\n</ul>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Form\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Form</span></span><a class=\"heading-anchor\" href=\"#django.forms.Form\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>To create an unbound <a class=\"reference internal\" href=\"#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> instance, simply instantiate the class:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>To bind data to a form, pass the data as a dictionary as the first parameter to\nyour <a class=\"reference internal\" href=\"#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> class constructor:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;hello&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Hi there&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;sender&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;foo@example.com&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;cc_myself&#39;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>In this dictionary, the keys are the field names, which correspond to the\nattributes in your <a class=\"reference internal\" href=\"#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> class. The values are the data you’re trying to\nvalidate. These will usually be strings, but there’s no requirement that they be\nstrings; the type of data you pass depends on the <a class=\"reference internal\" href=\"/en/1.8/ref/forms/fields/#django.forms.Field\" title=\"django.forms.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a>, as we’ll see\nin a moment.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Form.is_bound\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.</span></span><span class=\"sig-name descname\"><span class=\"pre\">is_bound</span></span><a class=\"heading-anchor\" href=\"#django.forms.Form.is_bound\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>If you need to distinguish between bound and unbound form instances at runtime,\ncheck the value of the form’s <a class=\"reference internal\" href=\"#django.forms.Form.is_bound\" title=\"django.forms.Form.is_bound\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">is_bound</span></code></a> attribute:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">is_bound</span>\n<span class=\"go\">False</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">({</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;hello&#39;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">is_bound</span>\n<span class=\"go\">True</span>\n</code></pre></div>\n<p>Note that passing an empty dictionary creates a <em>bound</em> form with empty data:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">({})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">is_bound</span>\n<span class=\"go\">True</span>\n</code></pre></div>\n<p>If you have a bound <a class=\"reference internal\" href=\"#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> instance and want to change the data somehow,\nor if you want to bind an unbound <a class=\"reference internal\" href=\"#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> instance to some data, create\nanother <a class=\"reference internal\" href=\"#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> instance. There is no way to change data in a\n<a class=\"reference internal\" href=\"#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> instance. Once a <a class=\"reference internal\" href=\"#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> instance has been created, you\nshould consider its data immutable, whether it has data or not.</p>\n</section>\n<section id=\"using-forms-to-validate-data\">\n<h2>Using forms to validate data<a class=\"heading-anchor\" href=\"#using-forms-to-validate-data\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Form.clean\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.</span></span><span class=\"sig-name descname\"><span class=\"pre\">clean</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Form.clean\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Implement a <code class=\"docutils literal notranslate\"><span class=\"pre\">clean()</span></code> method on your <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code> when you must add custom\nvalidation for fields that are interdependent. See\n<a class=\"reference internal\" href=\"/en/1.8/ref/forms/validation/#validating-fields-with-clean\"><span class=\"std std-ref\">Cleaning and validating fields that depend on each other</span></a> for example usage.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Form.is_valid\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.</span></span><span class=\"sig-name descname\"><span class=\"pre\">is_valid</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Form.is_valid\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The primary task of a <a class=\"reference internal\" href=\"#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> object is to validate data. With a bound\n<a class=\"reference internal\" href=\"#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> instance, call the <a class=\"reference internal\" href=\"#django.forms.Form.is_valid\" title=\"django.forms.Form.is_valid\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code></a> method to run validation\nand return a boolean designating whether the data was valid:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;hello&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Hi there&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;sender&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;foo@example.com&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;cc_myself&#39;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span>\n<span class=\"go\">True</span>\n</code></pre></div>\n<p>Let’s try with some invalid data. In this case, <code class=\"docutils literal notranslate\"><span class=\"pre\">subject</span></code> is blank (an error,\nbecause all fields are required by default) and <code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code> is not a valid\nemail address:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Hi there&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;sender&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;invalid email address&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;cc_myself&#39;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span>\n<span class=\"go\">False</span>\n</code></pre></div>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Form.errors\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.</span></span><span class=\"sig-name descname\"><span class=\"pre\">errors</span></span><a class=\"heading-anchor\" href=\"#django.forms.Form.errors\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Access the <a class=\"reference internal\" href=\"#django.forms.Form.errors\" title=\"django.forms.Form.errors\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">errors</span></code></a> attribute to get a dictionary of error\nmessages:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">errors</span>\n<span class=\"go\">{&#39;sender&#39;: [&#39;Enter a valid email address.&#39;], &#39;subject&#39;: [&#39;This field is required.&#39;]}</span>\n</code></pre></div>\n<p>In this dictionary, the keys are the field names, and the values are lists of\nUnicode strings representing the error messages. The error messages are stored\nin lists because a field can have multiple error messages.</p>\n<p>You can access <a class=\"reference internal\" href=\"#django.forms.Form.errors\" title=\"django.forms.Form.errors\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">errors</span></code></a> without having to call\n<a class=\"reference internal\" href=\"#django.forms.Form.is_valid\" title=\"django.forms.Form.is_valid\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code></a> first. The form’s data will be validated the first time\neither you call <a class=\"reference internal\" href=\"#django.forms.Form.is_valid\" title=\"django.forms.Form.is_valid\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code></a> or access <a class=\"reference internal\" href=\"#django.forms.Form.errors\" title=\"django.forms.Form.errors\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">errors</span></code></a>.</p>\n<p>The validation routines will only get called once, regardless of how many times\nyou access <a class=\"reference internal\" href=\"#django.forms.Form.errors\" title=\"django.forms.Form.errors\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">errors</span></code></a> or call <a class=\"reference internal\" href=\"#django.forms.Form.is_valid\" title=\"django.forms.Form.is_valid\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code></a>. This means that\nif validation has side effects, those side effects will only be triggered once.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Form.errors.as_data\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.errors.</span></span><span class=\"sig-name descname\"><span class=\"pre\">as_data</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Form.errors.as_data\"><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=\"1.7\">\n<p class=\"version-note-title\">New in Django 1.7</p></aside>\n<p>Returns a <code class=\"docutils literal notranslate\"><span class=\"pre\">dict</span></code> that maps fields to their original <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code>\ninstances.</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">errors</span><span class=\"o\">.</span><span class=\"n\">as_data</span><span class=\"p\">()</span>\n<span class=\"go\">{&#39;sender&#39;: [ValidationError([&#39;Enter a valid email address.&#39;])],</span>\n<span class=\"go\">&#39;subject&#39;: [ValidationError([&#39;This field is required.&#39;])]}</span>\n</code></pre></div>\n<p>Use this method anytime you need to identify an error by its <code class=\"docutils literal notranslate\"><span class=\"pre\">code</span></code>. This\nenables things like rewriting the error’s message or writing custom logic in a\nview when a given error is present. It can also be used to serialize the errors\nin a custom format (e.g. XML); for instance, <a class=\"reference internal\" href=\"#django.forms.Form.errors.as_json\" title=\"django.forms.Form.errors.as_json\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">as_json()</span></code></a>\nrelies on <code class=\"docutils literal notranslate\"><span class=\"pre\">as_data()</span></code>.</p>\n<p>The need for the <code class=\"docutils literal notranslate\"><span class=\"pre\">as_data()</span></code> method is due to backwards compatibility.\nPreviously <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code> instances were lost as soon as their\n<strong>rendered</strong> error messages were added to the <code class=\"docutils literal notranslate\"><span class=\"pre\">Form.errors</span></code> dictionary.\nIdeally <code class=\"docutils literal notranslate\"><span class=\"pre\">Form.errors</span></code> would have stored <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code> instances\nand methods with an <code class=\"docutils literal notranslate\"><span class=\"pre\">as_</span></code> prefix could render them, but it had to be done\nthe other way around in order not to break code that expects rendered error\nmessages in <code class=\"docutils literal notranslate\"><span class=\"pre\">Form.errors</span></code>.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Form.errors.as_json\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.errors.</span></span><span class=\"sig-name descname\"><span class=\"pre\">as_json</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">escape_html</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Form.errors.as_json\"><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=\"1.7\">\n<p class=\"version-note-title\">New in Django 1.7</p></aside>\n<p>Returns the errors serialized as JSON.</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">errors</span><span class=\"o\">.</span><span class=\"n\">as_json</span><span class=\"p\">()</span>\n<span class=\"go\">{&quot;sender&quot;: [{&quot;message&quot;: &quot;Enter a valid email address.&quot;, &quot;code&quot;: &quot;invalid&quot;}],</span>\n<span class=\"go\">&quot;subject&quot;: [{&quot;message&quot;: &quot;This field is required.&quot;, &quot;code&quot;: &quot;required&quot;}]}</span>\n</code></pre></div>\n<p>By default, <code class=\"docutils literal notranslate\"><span class=\"pre\">as_json()</span></code> does not escape its output. If you are using it for\nsomething like AJAX requests to a form view where the client interprets the\nresponse and inserts errors into the page, you’ll want to be sure to escape the\nresults on the client-side to avoid the possibility of a cross-site scripting\nattack. It’s trivial to do so using a JavaScript library like jQuery - simply\nuse <code class=\"docutils literal notranslate\"><span class=\"pre\">$(el).text(errorText)</span></code> rather than <code class=\"docutils literal notranslate\"><span class=\"pre\">.html()</span></code>.</p>\n<p>If for some reason you don’t want to use client-side escaping, you can also\nset <code class=\"docutils literal notranslate\"><span class=\"pre\">escape_html=True</span></code> and error messages will be escaped so you can use them\ndirectly in HTML.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Form.add_error\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.</span></span><span class=\"sig-name descname\"><span class=\"pre\">add_error</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">field</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">error</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Form.add_error\"><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=\"1.7\">\n<p class=\"version-note-title\">New in Django 1.7</p></aside>\n<p>This method allows adding errors to specific fields from within the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">Form.clean()</span></code> method, or from outside the form altogether; for instance\nfrom a view.</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">field</span></code> argument is the name of the field to which the errors\nshould be added. If its value is <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> the error will be treated as\na non-field error as returned by <a class=\"reference internal\" href=\"#django.forms.Form.non_field_errors\" title=\"django.forms.Form.non_field_errors\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Form.non_field_errors()</span></code></a>.</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">error</span></code> argument can be a simple string, or preferably an instance of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code>. See <a class=\"reference internal\" href=\"/en/1.8/ref/forms/validation/#raising-validation-error\"><span class=\"std std-ref\">Raising ValidationError</span></a> for best practices\nwhen defining form errors.</p>\n<p>Note that <code class=\"docutils literal notranslate\"><span class=\"pre\">Form.add_error()</span></code> automatically removes the relevant field from\n<code class=\"docutils literal notranslate\"><span class=\"pre\">cleaned_data</span></code>.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Form.has_error\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.</span></span><span class=\"sig-name descname\"><span class=\"pre\">has_error</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">field</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">code</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Form.has_error\"><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=\"1.8\">\n<p class=\"version-note-title\">New in Django 1.8</p></aside>\n<p>This method returns a boolean designating whether a field has an error with\na specific error <code class=\"docutils literal notranslate\"><span class=\"pre\">code</span></code>. If <code class=\"docutils literal notranslate\"><span class=\"pre\">code</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>, it will return <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>\nif the field contains any errors at all.</p>\n<p>To check for non-field errors use\n<a class=\"reference internal\" href=\"/en/1.8/ref/exceptions/#django.core.exceptions.NON_FIELD_ERRORS\" title=\"django.core.exceptions.NON_FIELD_ERRORS\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">NON_FIELD_ERRORS</span></code></a> as the <code class=\"docutils literal notranslate\"><span class=\"pre\">field</span></code> parameter.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Form.non_field_errors\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.</span></span><span class=\"sig-name descname\"><span class=\"pre\">non_field_errors</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Form.non_field_errors\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>This method returns the list of errors from <a class=\"reference internal\" href=\"#django.forms.Form.errors\" title=\"django.forms.Form.errors\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Form.errors</span></code></a>  that aren’t associated with a particular field.\nThis includes <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code>s that are raised in <a class=\"reference internal\" href=\"#django.forms.Form.clean\" title=\"django.forms.Form.clean\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Form.clean()</span></code></a> and errors added using <a class=\"reference internal\" href=\"#django.forms.Form.add_error\" title=\"django.forms.Form.add_error\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Form.add_error(None,</span>\n<span class=\"pre\">&quot;...&quot;)</span></code></a>.</p>\n<section id=\"behavior-of-unbound-forms\">\n<h3>Behavior of unbound forms<a class=\"heading-anchor\" href=\"#behavior-of-unbound-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>It’s meaningless to validate a form with no data, but, for the record, here’s\nwhat happens with unbound forms:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span>\n<span class=\"go\">False</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">errors</span>\n<span class=\"go\">{}</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"dynamic-initial-values\">\n<h2>Dynamic initial values<a class=\"heading-anchor\" href=\"#dynamic-initial-values\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Form.initial\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.</span></span><span class=\"sig-name descname\"><span class=\"pre\">initial</span></span><a class=\"heading-anchor\" href=\"#django.forms.Form.initial\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Use <a class=\"reference internal\" href=\"#django.forms.Form.initial\" title=\"django.forms.Form.initial\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">initial</span></code></a> to declare the initial value of form fields at\nruntime. For example, you might want to fill in a <code class=\"docutils literal notranslate\"><span class=\"pre\">username</span></code> field with the\nusername of the current session.</p>\n<p>To accomplish this, use the <a class=\"reference internal\" href=\"#django.forms.Form.initial\" title=\"django.forms.Form.initial\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">initial</span></code></a> argument to a <a class=\"reference internal\" href=\"#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a>.\nThis argument, if given, should be a dictionary mapping field names to initial\nvalues. Only include the fields for which you’re specifying an initial value;\nit’s not necessary to include every field in your form. 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=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Hi there!&#39;</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>These values are only displayed for unbound forms, and they’re not used as\nfallback values if a particular value isn’t provided.</p>\n<p>Note that if a <a class=\"reference internal\" href=\"/en/1.8/ref/forms/fields/#django.forms.Field\" title=\"django.forms.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a> defines <a class=\"reference internal\" href=\"#django.forms.Form.initial\" title=\"django.forms.Form.initial\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">initial</span></code></a> <em>and</em>\nyou include <code class=\"docutils literal notranslate\"><span class=\"pre\">initial</span></code> when instantiating the <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code>, then the latter\n<code class=\"docutils literal notranslate\"><span class=\"pre\">initial</span></code> will have precedence. In this example, <code class=\"docutils literal notranslate\"><span class=\"pre\">initial</span></code> is provided both\nat the field level and at the form instance level, and the latter gets\nprecedence:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CommentForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"s1\">&#39;class&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">()</span>\n<span class=\"gp\">... </span>    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">CommentForm</span><span class=\"p\">(</span><span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;instance&#39;</span><span class=\"p\">},</span> <span class=\"n\">auto_id</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;Name:&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;name&quot; value=&quot;instance&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;Url:&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;url&quot; name=&quot;url&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;Comment:&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;comment&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"checking-which-form-data-has-changed\">\n<h2>Checking which form data has changed<a class=\"heading-anchor\" href=\"#checking-which-form-data-has-changed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Form.has_changed\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.</span></span><span class=\"sig-name descname\"><span class=\"pre\">has_changed</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Form.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>Use the <code class=\"docutils literal notranslate\"><span class=\"pre\">has_changed()</span></code> method on your <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code> when you need to check if the\nform data has been changed from the initial data.</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;hello&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Hi there&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;sender&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;foo@example.com&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;cc_myself&#39;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">data</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">has_changed</span><span class=\"p\">()</span>\n<span class=\"go\">False</span>\n</code></pre></div>\n<p>When the form is submitted, we reconstruct it and provide the original data\nso that the comparison can be done:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">data</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">has_changed</span><span class=\"p\">()</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">has_changed()</span></code> will be <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> if the data from <code class=\"docutils literal notranslate\"><span class=\"pre\">request.POST</span></code> differs\nfrom what was provided in <a class=\"reference internal\" href=\"#django.forms.Form.initial\" title=\"django.forms.Form.initial\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">initial</span></code></a> or <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> otherwise. The\nresult is computed by calling <a class=\"reference internal\" href=\"/en/1.8/ref/forms/fields/#django.forms.Field.has_changed\" title=\"django.forms.Field.has_changed\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Field.has_changed()</span></code></a> for each field in the\nform.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Form.changed_data\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.</span></span><span class=\"sig-name descname\"><span class=\"pre\">changed_data</span></span><a class=\"heading-anchor\" href=\"#django.forms.Form.changed_data\"><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\"><span class=\"pre\">changed_data</span></code> attribute returns a list of the names of the fields whose\nvalues in the form’s bound data (usually <code class=\"docutils literal notranslate\"><span class=\"pre\">request.POST</span></code>) differ from what was\nprovided in <a class=\"reference internal\" href=\"#django.forms.Form.initial\" title=\"django.forms.Form.initial\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">initial</span></code></a>. It returns an empty list if no data differs.</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">data</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">if</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">has_changed</span><span class=\"p\">():</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;The following fields changed: </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"s2\">&quot;, &quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">changed_data</span><span class=\"p\">))</span>\n</code></pre></div>\n</section>\n<section id=\"accessing-the-fields-from-the-form\">\n<h2>Accessing the fields from the form<a class=\"heading-anchor\" href=\"#accessing-the-fields-from-the-form\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Form.fields\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.</span></span><span class=\"sig-name descname\"><span class=\"pre\">fields</span></span><a class=\"heading-anchor\" href=\"#django.forms.Form.fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>You can access the fields of <a class=\"reference internal\" href=\"#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> instance from its <code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></code>\nattribute:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> <span class=\"n\">row</span> <span class=\"ow\">in</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">fields</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">():</span> <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">row</span><span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">&lt;django.forms.fields.CharField object at 0x7ffaac632510&gt;</span>\n<span class=\"go\">&lt;django.forms.fields.URLField object at 0x7ffaac632f90&gt;</span>\n<span class=\"go\">&lt;django.forms.fields.CharField object at 0x7ffaac3aa050&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">fields</span><span class=\"p\">[</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">]</span>\n<span class=\"go\">&lt;django.forms.fields.CharField object at 0x7ffaac6324d0&gt;</span>\n</code></pre></div>\n<p>You can alter the field of <a class=\"reference internal\" href=\"#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> instance to change the way it is\npresented in the form:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_table</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;&lt;tr&gt;&lt;th&gt;Name:&lt;/th&gt;&lt;td&gt;&lt;input name=&quot;name&quot; type=&quot;text&quot; value=&quot;instance&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">fields</span><span class=\"p\">[</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">label</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Username&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_table</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;&lt;tr&gt;&lt;th&gt;Username:&lt;/th&gt;&lt;td&gt;&lt;input name=&quot;name&quot; type=&quot;text&quot; value=&quot;instance&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&#39;</span>\n</code></pre></div>\n<p>Beware not to alter the <code class=\"docutils literal notranslate\"><span class=\"pre\">base_fields</span></code> attribute because this modification\nwill influence all subsequent <code class=\"docutils literal notranslate\"><span class=\"pre\">ContactForm</span></code> instances within the same Python\nprocess:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">base_fields</span><span class=\"p\">[</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">label</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Username&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">another_f</span> <span class=\"o\">=</span> <span class=\"n\">CommentForm</span><span class=\"p\">(</span><span class=\"n\">auto_id</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">another_f</span><span class=\"o\">.</span><span class=\"n\">as_table</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;&lt;tr&gt;&lt;th&gt;Username:&lt;/th&gt;&lt;td&gt;&lt;input name=&quot;name&quot; type=&quot;text&quot; value=&quot;class&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&#39;</span>\n</code></pre></div>\n</section>\n<section id=\"accessing-clean-data\">\n<h2>Accessing “clean” data<a class=\"heading-anchor\" href=\"#accessing-clean-data\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Form.cleaned_data\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.</span></span><span class=\"sig-name descname\"><span class=\"pre\">cleaned_data</span></span><a class=\"heading-anchor\" href=\"#django.forms.Form.cleaned_data\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Each field in a <a class=\"reference internal\" href=\"#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> class is responsible not only for validating\ndata, but also for “cleaning” it – normalizing it to a consistent format. This\nis a nice feature, because it allows data for a particular field to be input in\na variety of ways, always resulting in consistent output.</p>\n<p>For example, <a class=\"reference internal\" href=\"/en/1.8/ref/forms/fields/#django.forms.DateField\" title=\"django.forms.DateField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateField</span></code></a> normalizes input into a\nPython <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime.date</span></code> object. Regardless of whether you pass it a string in\nthe format <code class=\"docutils literal notranslate\"><span class=\"pre\">'1994-07-15'</span></code>, a <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime.date</span></code> object, or a number of other\nformats, <code class=\"docutils literal notranslate\"><span class=\"pre\">DateField</span></code> will always normalize it to a <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime.date</span></code> object\nas long as it’s valid.</p>\n<p>Once you’ve created a <a class=\"reference internal\" href=\"#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> instance with a set of data and validated\nit, you can access the clean data via its <code class=\"docutils literal notranslate\"><span class=\"pre\">cleaned_data</span></code> attribute:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;hello&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Hi there&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;sender&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;foo@example.com&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;cc_myself&#39;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span>\n<span class=\"go\">True</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span>\n<span class=\"go\">{&#39;cc_myself&#39;: True, &#39;message&#39;: &#39;Hi there&#39;, &#39;sender&#39;: &#39;foo@example.com&#39;, &#39;subject&#39;: &#39;hello&#39;}</span>\n</code></pre></div>\n<p>Note that any text-based field – such as <code class=\"docutils literal notranslate\"><span class=\"pre\">CharField</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">EmailField</span></code> –\nalways cleans the input into a Unicode string. We’ll cover the encoding\nimplications later in this document.</p>\n<p>If your data does <em>not</em> validate, the <code class=\"docutils literal notranslate\"><span class=\"pre\">cleaned_data</span></code> dictionary contains\nonly the valid fields:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Hi there&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;sender&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;invalid email address&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;cc_myself&#39;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span>\n<span class=\"go\">False</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span>\n<span class=\"go\">{&#39;cc_myself&#39;: True, &#39;message&#39;: &#39;Hi there&#39;}</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">cleaned_data</span></code> will always <em>only</em> contain a key for fields defined in the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code>, even if you pass extra data when you define the <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code>. In this\nexample, we pass a bunch of extra fields to the <code class=\"docutils literal notranslate\"><span class=\"pre\">ContactForm</span></code> constructor,\nbut <code class=\"docutils literal notranslate\"><span class=\"pre\">cleaned_data</span></code> contains only the form’s fields:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;hello&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Hi there&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;sender&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;foo@example.com&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;cc_myself&#39;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;extra_field_1&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;foo&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;extra_field_2&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;bar&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;extra_field_3&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;baz&#39;</span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span>\n<span class=\"go\">True</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span> <span class=\"c1\"># Doesn&#39;t contain extra_field_1, etc.</span>\n<span class=\"go\">{&#39;cc_myself&#39;: True, &#39;message&#39;: &#39;Hi there&#39;, &#39;sender&#39;: &#39;foo@example.com&#39;, &#39;subject&#39;: &#39;hello&#39;}</span>\n</code></pre></div>\n<p>When the <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code> is valid, <code class=\"docutils literal notranslate\"><span class=\"pre\">cleaned_data</span></code> will include a key and value for\n<em>all</em> its fields, even if the data didn’t include a value for some optional\nfields. In this example, the data dictionary doesn’t include a value for the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">nick_name</span></code> field, but <code class=\"docutils literal notranslate\"><span class=\"pre\">cleaned_data</span></code> includes it, with an empty value:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Form</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">OptionalPersonForm</span><span class=\"p\">(</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">CharField</span><span class=\"p\">()</span>\n<span class=\"gp\">... </span>    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">CharField</span><span class=\"p\">()</span>\n<span class=\"gp\">... </span>    <span class=\"n\">nick_name</span> <span class=\"o\">=</span> <span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">required</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;first_name&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;John&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Lennon&#39;</span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">OptionalPersonForm</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span>\n<span class=\"go\">True</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span>\n<span class=\"go\">{&#39;nick_name&#39;: &#39;&#39;, &#39;first_name&#39;: &#39;John&#39;, &#39;last_name&#39;: &#39;Lennon&#39;}</span>\n</code></pre></div>\n<p>In this above example, the <code class=\"docutils literal notranslate\"><span class=\"pre\">cleaned_data</span></code> value for <code class=\"docutils literal notranslate\"><span class=\"pre\">nick_name</span></code> is set to an\nempty string, because <code class=\"docutils literal notranslate\"><span class=\"pre\">nick_name</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">CharField</span></code>, and <code class=\"docutils literal notranslate\"><span class=\"pre\">CharField</span></code>s treat\nempty values as an empty string. Each field type knows what its “blank” value\nis – e.g., for <code class=\"docutils literal notranslate\"><span class=\"pre\">DateField</span></code>, it’s <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> instead of the empty string. For\nfull details on each field’s behavior in this case, see the “Empty value” note\nfor each field in the “Built-in <code class=\"docutils literal notranslate\"><span class=\"pre\">Field</span></code> classes” section below.</p>\n<p>You can write code to perform validation for particular form fields (based on\ntheir name) or for the form as a whole (considering combinations of various\nfields). More information about this is in <a class=\"reference internal\" href=\"/en/1.8/ref/forms/validation/\"><span class=\"doc\">Form and field validation</span></a>.</p>\n</section>\n<section id=\"outputting-forms-as-html\">\n<span id=\"ref-forms-api-outputting-html\"></span><h2>Outputting forms as HTML<a class=\"heading-anchor\" href=\"#outputting-forms-as-html\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>The second task of a <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code> object is to render itself as HTML. To do so,\nsimply <code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> it:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_subject&quot;&gt;Subject:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input id=&quot;id_subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_message&quot;&gt;Message:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;message&quot; id=&quot;id_message&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_sender&quot;&gt;Sender:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;email&quot; name=&quot;sender&quot; id=&quot;id_sender&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_cc_myself&quot;&gt;Cc myself:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; id=&quot;id_cc_myself&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n</code></pre></div>\n<p>If the form is bound to data, the HTML output will include that data\nappropriately. For example, if a field is represented by an\n<code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;text&quot;&gt;</span></code>, the data will be in the <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> attribute. If a\nfield is represented by an <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;checkbox&quot;&gt;</span></code>, then that HTML will\ninclude <code class=\"docutils literal notranslate\"><span class=\"pre\">checked=&quot;checked&quot;</span></code> if appropriate:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;hello&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Hi there&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;sender&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;foo@example.com&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;cc_myself&#39;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_subject&quot;&gt;Subject:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input id=&quot;id_subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; value=&quot;hello&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_message&quot;&gt;Message:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;message&quot; id=&quot;id_message&quot; value=&quot;Hi there&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_sender&quot;&gt;Sender:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;email&quot; name=&quot;sender&quot; id=&quot;id_sender&quot; value=&quot;foo@example.com&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_cc_myself&quot;&gt;Cc myself:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; id=&quot;id_cc_myself&quot; checked=&quot;checked&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n</code></pre></div>\n<p>This default output is a two-column HTML table, with a <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;tr&gt;</span></code> for each field.\nNotice the following:</p>\n<ul class=\"simple\">\n<li><p>For flexibility, the output does <em>not</em> include the <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;table&gt;</span></code> and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;/table&gt;</span></code> tags, nor does it include the <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;/form&gt;</span></code>\ntags or an <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;submit&quot;&gt;</span></code> tag. It’s your job to do that.</p></li>\n<li><p>Each field type has a default HTML representation. <code class=\"docutils literal notranslate\"><span class=\"pre\">CharField</span></code> is\nrepresented by an <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;text&quot;&gt;</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">EmailField</span></code> by an\n<code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;email&quot;&gt;</span></code>.\n<code class=\"docutils literal notranslate\"><span class=\"pre\">BooleanField</span></code> is represented by an <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;checkbox&quot;&gt;</span></code>. Note\nthese are merely sensible defaults; you can specify which HTML to use for\na given field by using widgets, which we’ll explain shortly.</p></li>\n<li><p>The HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> for each tag is taken directly from its attribute name\nin the <code class=\"docutils literal notranslate\"><span class=\"pre\">ContactForm</span></code> class.</p></li>\n<li><p>The text label for each field – e.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">'Subject:'</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">'Message:'</span></code> and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">'Cc</span> <span class=\"pre\">myself:'</span></code> is generated from the field name by converting all\nunderscores to spaces and upper-casing the first letter. Again, note\nthese are merely sensible defaults; you can also specify labels manually.</p></li>\n<li><p>Each text label is surrounded in an HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> tag, which points\nto the appropriate form field via its <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code>. Its <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code>, in turn, is\ngenerated by prepending <code class=\"docutils literal notranslate\"><span class=\"pre\">'id_'</span></code> to the field name. The <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code>\nattributes and <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> tags are included in the output by default, to\nfollow best practices, but you can change that behavior.</p></li>\n</ul>\n<p>Although <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;table&gt;</span></code> output is the default output style when you <code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> a\nform, other output styles are available. Each style is available as a method on\na form object, and each rendering method returns a Unicode object.</p>\n<section id=\"as-p\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">as_p()</span></code><a class=\"heading-anchor\" href=\"#as-p\"><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.Form.as_p\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.</span></span><span class=\"sig-name descname\"><span class=\"pre\">as_p</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Form.as_p\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">as_p()</span></code> renders the form as a series of <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;p&gt;</span></code> tags, with each <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;p&gt;</span></code>\ncontaining one field:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_p</span><span class=\"p\">()</span>\n<span class=\"go\">&#39;&lt;p&gt;&lt;label for=&quot;id_subject&quot;&gt;Subject:&lt;/label&gt; &lt;input id=&quot;id_subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/p&gt;\\n&lt;p&gt;&lt;label for=&quot;id_message&quot;&gt;Message:&lt;/label&gt; &lt;input type=&quot;text&quot; name=&quot;message&quot; id=&quot;id_message&quot; /&gt;&lt;/p&gt;\\n&lt;p&gt;&lt;label for=&quot;id_sender&quot;&gt;Sender:&lt;/label&gt; &lt;input type=&quot;text&quot; name=&quot;sender&quot; id=&quot;id_sender&quot; /&gt;&lt;/p&gt;\\n&lt;p&gt;&lt;label for=&quot;id_cc_myself&quot;&gt;Cc myself:&lt;/label&gt; &lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; id=&quot;id_cc_myself&quot; /&gt;&lt;/p&gt;&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_p</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;p&gt;&lt;label for=&quot;id_subject&quot;&gt;Subject:&lt;/label&gt; &lt;input id=&quot;id_subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/p&gt;</span>\n<span class=\"go\">&lt;p&gt;&lt;label for=&quot;id_message&quot;&gt;Message:&lt;/label&gt; &lt;input type=&quot;text&quot; name=&quot;message&quot; id=&quot;id_message&quot; /&gt;&lt;/p&gt;</span>\n<span class=\"go\">&lt;p&gt;&lt;label for=&quot;id_sender&quot;&gt;Sender:&lt;/label&gt; &lt;input type=&quot;email&quot; name=&quot;sender&quot; id=&quot;id_sender&quot; /&gt;&lt;/p&gt;</span>\n<span class=\"go\">&lt;p&gt;&lt;label for=&quot;id_cc_myself&quot;&gt;Cc myself:&lt;/label&gt; &lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; id=&quot;id_cc_myself&quot; /&gt;&lt;/p&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"as-ul\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">as_ul()</span></code><a class=\"heading-anchor\" href=\"#as-ul\"><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.Form.as_ul\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.</span></span><span class=\"sig-name descname\"><span class=\"pre\">as_ul</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Form.as_ul\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">as_ul()</span></code> renders the form as a series of <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;li&gt;</span></code> tags, with each\n<code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;li&gt;</span></code> containing one field. It does <em>not</em> include the <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;ul&gt;</span></code> or\n<code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;/ul&gt;</span></code>, so that you can specify any HTML attributes on the <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;ul&gt;</span></code> for\nflexibility:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_ul</span><span class=\"p\">()</span>\n<span class=\"go\">&#39;&lt;li&gt;&lt;label for=&quot;id_subject&quot;&gt;Subject:&lt;/label&gt; &lt;input id=&quot;id_subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/li&gt;\\n&lt;li&gt;&lt;label for=&quot;id_message&quot;&gt;Message:&lt;/label&gt; &lt;input type=&quot;text&quot; name=&quot;message&quot; id=&quot;id_message&quot; /&gt;&lt;/li&gt;\\n&lt;li&gt;&lt;label for=&quot;id_sender&quot;&gt;Sender:&lt;/label&gt; &lt;input type=&quot;email&quot; name=&quot;sender&quot; id=&quot;id_sender&quot; /&gt;&lt;/li&gt;\\n&lt;li&gt;&lt;label for=&quot;id_cc_myself&quot;&gt;Cc myself:&lt;/label&gt; &lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; id=&quot;id_cc_myself&quot; /&gt;&lt;/li&gt;&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_ul</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;id_subject&quot;&gt;Subject:&lt;/label&gt; &lt;input id=&quot;id_subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;id_message&quot;&gt;Message:&lt;/label&gt; &lt;input type=&quot;text&quot; name=&quot;message&quot; id=&quot;id_message&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;id_sender&quot;&gt;Sender:&lt;/label&gt; &lt;input type=&quot;email&quot; name=&quot;sender&quot; id=&quot;id_sender&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;id_cc_myself&quot;&gt;Cc myself:&lt;/label&gt; &lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; id=&quot;id_cc_myself&quot; /&gt;&lt;/li&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"as-table\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">as_table()</span></code><a class=\"heading-anchor\" href=\"#as-table\"><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.Form.as_table\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.</span></span><span class=\"sig-name descname\"><span class=\"pre\">as_table</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Form.as_table\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Finally, <code class=\"docutils literal notranslate\"><span class=\"pre\">as_table()</span></code> outputs the form as an HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;table&gt;</span></code>. This is\nexactly the same as <code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code>. In fact, when you <code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> a form object,\nit calls its <code class=\"docutils literal notranslate\"><span class=\"pre\">as_table()</span></code> method behind the scenes:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_table</span><span class=\"p\">()</span>\n<span class=\"go\">&#39;&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_subject&quot;&gt;Subject:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input id=&quot;id_subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;\\n&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_message&quot;&gt;Message:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;message&quot; id=&quot;id_message&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;\\n&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_sender&quot;&gt;Sender:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;email&quot; name=&quot;sender&quot; id=&quot;id_sender&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;\\n&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_cc_myself&quot;&gt;Cc myself:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; id=&quot;id_cc_myself&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_table</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_subject&quot;&gt;Subject:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input id=&quot;id_subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_message&quot;&gt;Message:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;message&quot; id=&quot;id_message&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_sender&quot;&gt;Sender:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;email&quot; name=&quot;sender&quot; id=&quot;id_sender&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_cc_myself&quot;&gt;Cc myself:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; id=&quot;id_cc_myself&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"styling-required-or-erroneous-form-rows\">\n<span id=\"ref-forms-api-styling-form-rows\"></span><h3>Styling required or erroneous form rows<a class=\"heading-anchor\" href=\"#styling-required-or-erroneous-form-rows\"><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.Form.error_css_class\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.</span></span><span class=\"sig-name descname\"><span class=\"pre\">error_css_class</span></span><a class=\"heading-anchor\" href=\"#django.forms.Form.error_css_class\"><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.Form.required_css_class\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.</span></span><span class=\"sig-name descname\"><span class=\"pre\">required_css_class</span></span><a class=\"heading-anchor\" href=\"#django.forms.Form.required_css_class\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>It’s pretty common to style form rows and fields that are required or have\nerrors. For example, you might want to present required form rows in bold and\nhighlight errors in red.</p>\n<p>The <a class=\"reference internal\" href=\"#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> class has a couple of hooks you can use to add <code class=\"docutils literal notranslate\"><span class=\"pre\">class</span></code>\nattributes to required rows or to rows with errors: simply set the\n<a class=\"reference internal\" href=\"#django.forms.Form.error_css_class\" title=\"django.forms.Form.error_css_class\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Form.error_css_class</span></code></a> and/or <a class=\"reference internal\" href=\"#django.forms.Form.required_css_class\" title=\"django.forms.Form.required_css_class\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Form.required_css_class</span></code></a>\nattributes:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Form</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">error_css_class</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;error&#39;</span>\n    <span class=\"n\">required_css_class</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;required&#39;</span>\n\n    <span class=\"c1\"># ... and the rest of your fields here</span>\n</code></pre></div>\n<p>Once you’ve done that, rows will be given <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;error&quot;</span></code> and/or <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;required&quot;</span></code>\nclasses, as needed. The HTML will look something like:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_table</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;tr class=&quot;required&quot;&gt;&lt;th&gt;&lt;label class=&quot;required&quot; for=&quot;id_subject&quot;&gt;Subject:&lt;/label&gt;    ...</span>\n<span class=\"go\">&lt;tr class=&quot;required&quot;&gt;&lt;th&gt;&lt;label class=&quot;required&quot; for=&quot;id_message&quot;&gt;Message:&lt;/label&gt;    ...</span>\n<span class=\"go\">&lt;tr class=&quot;required error&quot;&gt;&lt;th&gt;&lt;label class=&quot;required&quot; for=&quot;id_sender&quot;&gt;Sender:&lt;/label&gt;      ...</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_cc_myself&quot;&gt;Cc myself:&lt;label&gt; ...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"p\">[</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">label_tag</span><span class=\"p\">()</span>\n<span class=\"go\">&lt;label class=&quot;required&quot; for=&quot;id_subject&quot;&gt;Subject:&lt;/label&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"p\">[</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">label_tag</span><span class=\"p\">(</span><span class=\"n\">attrs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;class&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;foo&#39;</span><span class=\"p\">})</span>\n<span class=\"go\">&lt;label for=&quot;id_subject&quot; class=&quot;foo required&quot;&gt;Subject:&lt;/label&gt;</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"1.8\">\n<p class=\"version-note-title\">Changed in Django 1.8</p><p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">required_css_class</span></code> will also be added to the <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> tag as\nseen above.</p>\n</aside>\n</section>\n<section id=\"configuring-form-elements-html-id-attributes-and-label-tags\">\n<span id=\"ref-forms-api-configuring-label\"></span><h3>Configuring form elements’ HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> attributes and <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> tags<a class=\"heading-anchor\" href=\"#configuring-form-elements-html-id-attributes-and-label-tags\"><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.Form.auto_id\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.</span></span><span class=\"sig-name descname\"><span class=\"pre\">auto_id</span></span><a class=\"heading-anchor\" href=\"#django.forms.Form.auto_id\"><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, the form rendering methods include:</p>\n<ul class=\"simple\">\n<li><p>HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> attributes on the form elements.</p></li>\n<li><p>The corresponding <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> tags around the labels. An HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> tag\ndesignates which label text is associated with which form element. This small\nenhancement makes forms more usable and more accessible to assistive devices.\nIt’s always a good idea to use <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> tags.</p></li>\n</ul>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> attribute values are generated by prepending <code class=\"docutils literal notranslate\"><span class=\"pre\">id_</span></code> to the form\nfield names.  This behavior is configurable, though, if you want to change the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> convention or remove HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> attributes and <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> tags\nentirely.</p>\n<p>Use the <code class=\"docutils literal notranslate\"><span class=\"pre\">auto_id</span></code> argument to the <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code> constructor to control the <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code>\nand label behavior. This argument must be <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> or a string.</p>\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">auto_id</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, then the form output will not include <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code>\ntags nor <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> attributes:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">auto_id</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_table</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;Subject:&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;Message:&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;message&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;Sender:&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;email&quot; name=&quot;sender&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;Cc myself:&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_ul</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;li&gt;Subject: &lt;input type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;Message: &lt;input type=&quot;text&quot; name=&quot;message&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;Sender: &lt;input type=&quot;email&quot; name=&quot;sender&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;Cc myself: &lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_p</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;p&gt;Subject: &lt;input type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/p&gt;</span>\n<span class=\"go\">&lt;p&gt;Message: &lt;input type=&quot;text&quot; name=&quot;message&quot; /&gt;&lt;/p&gt;</span>\n<span class=\"go\">&lt;p&gt;Sender: &lt;input type=&quot;email&quot; name=&quot;sender&quot; /&gt;&lt;/p&gt;</span>\n<span class=\"go\">&lt;p&gt;Cc myself: &lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; /&gt;&lt;/p&gt;</span>\n</code></pre></div>\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">auto_id</span></code> is set to <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, then the form output <em>will</em> include\n<code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> tags and will simply use the field name as its <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> for each form\nfield:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">auto_id</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_table</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;subject&quot;&gt;Subject:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input id=&quot;subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;message&quot;&gt;Message:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;message&quot; id=&quot;message&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;sender&quot;&gt;Sender:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;email&quot; name=&quot;sender&quot; id=&quot;sender&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;cc_myself&quot;&gt;Cc myself:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; id=&quot;cc_myself&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_ul</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;subject&quot;&gt;Subject:&lt;/label&gt; &lt;input id=&quot;subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;message&quot;&gt;Message:&lt;/label&gt; &lt;input type=&quot;text&quot; name=&quot;message&quot; id=&quot;message&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;sender&quot;&gt;Sender:&lt;/label&gt; &lt;input type=&quot;email&quot; name=&quot;sender&quot; id=&quot;sender&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;cc_myself&quot;&gt;Cc myself:&lt;/label&gt; &lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; id=&quot;cc_myself&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_p</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;p&gt;&lt;label for=&quot;subject&quot;&gt;Subject:&lt;/label&gt; &lt;input id=&quot;subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/p&gt;</span>\n<span class=\"go\">&lt;p&gt;&lt;label for=&quot;message&quot;&gt;Message:&lt;/label&gt; &lt;input type=&quot;text&quot; name=&quot;message&quot; id=&quot;message&quot; /&gt;&lt;/p&gt;</span>\n<span class=\"go\">&lt;p&gt;&lt;label for=&quot;sender&quot;&gt;Sender:&lt;/label&gt; &lt;input type=&quot;email&quot; name=&quot;sender&quot; id=&quot;sender&quot; /&gt;&lt;/p&gt;</span>\n<span class=\"go\">&lt;p&gt;&lt;label for=&quot;cc_myself&quot;&gt;Cc myself:&lt;/label&gt; &lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; id=&quot;cc_myself&quot; /&gt;&lt;/p&gt;</span>\n</code></pre></div>\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">auto_id</span></code> is set to a string containing the format character <code class=\"docutils literal notranslate\"><span class=\"pre\">'%s'</span></code>,\nthen the form output will include <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> tags, and will generate <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code>\nattributes based on the format string. For example, for a format string\n<code class=\"docutils literal notranslate\"><span class=\"pre\">'field_%s'</span></code>, a field named <code class=\"docutils literal notranslate\"><span class=\"pre\">subject</span></code> will get the <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> value\n<code class=\"docutils literal notranslate\"><span class=\"pre\">'field_subject'</span></code>. Continuing our 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=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">auto_id</span><span class=\"o\">=</span><span class=\"s1\">&#39;id_for_</span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_table</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_for_subject&quot;&gt;Subject:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input id=&quot;id_for_subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_for_message&quot;&gt;Message:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;message&quot; id=&quot;id_for_message&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_for_sender&quot;&gt;Sender:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;email&quot; name=&quot;sender&quot; id=&quot;id_for_sender&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_for_cc_myself&quot;&gt;Cc myself:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; id=&quot;id_for_cc_myself&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_ul</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;id_for_subject&quot;&gt;Subject:&lt;/label&gt; &lt;input id=&quot;id_for_subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;id_for_message&quot;&gt;Message:&lt;/label&gt; &lt;input type=&quot;text&quot; name=&quot;message&quot; id=&quot;id_for_message&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;id_for_sender&quot;&gt;Sender:&lt;/label&gt; &lt;input type=&quot;email&quot; name=&quot;sender&quot; id=&quot;id_for_sender&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;id_for_cc_myself&quot;&gt;Cc myself:&lt;/label&gt; &lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; id=&quot;id_for_cc_myself&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_p</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;p&gt;&lt;label for=&quot;id_for_subject&quot;&gt;Subject:&lt;/label&gt; &lt;input id=&quot;id_for_subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/p&gt;</span>\n<span class=\"go\">&lt;p&gt;&lt;label for=&quot;id_for_message&quot;&gt;Message:&lt;/label&gt; &lt;input type=&quot;text&quot; name=&quot;message&quot; id=&quot;id_for_message&quot; /&gt;&lt;/p&gt;</span>\n<span class=\"go\">&lt;p&gt;&lt;label for=&quot;id_for_sender&quot;&gt;Sender:&lt;/label&gt; &lt;input type=&quot;email&quot; name=&quot;sender&quot; id=&quot;id_for_sender&quot; /&gt;&lt;/p&gt;</span>\n<span class=\"go\">&lt;p&gt;&lt;label for=&quot;id_for_cc_myself&quot;&gt;Cc myself:&lt;/label&gt; &lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; id=&quot;id_for_cc_myself&quot; /&gt;&lt;/p&gt;</span>\n</code></pre></div>\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">auto_id</span></code> is set to any other true value – such as a string that doesn’t\ninclude <code class=\"docutils literal notranslate\"><span class=\"pre\">%s</span></code> – then the library will act as if <code class=\"docutils literal notranslate\"><span class=\"pre\">auto_id</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n<p>By default, <code class=\"docutils literal notranslate\"><span class=\"pre\">auto_id</span></code> is set to the string <code class=\"docutils literal notranslate\"><span class=\"pre\">'id_%s'</span></code>.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Form.label_suffix\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.</span></span><span class=\"sig-name descname\"><span class=\"pre\">label_suffix</span></span><a class=\"heading-anchor\" href=\"#django.forms.Form.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>A translatable string (defaults to a colon (<code class=\"docutils literal notranslate\"><span class=\"pre\">:</span></code>) in English) that will be\nappended after any label name when a form is rendered.</p>\n<p>It’s possible to customize that character, or omit it entirely, using the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">label_suffix</span></code> parameter:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">auto_id</span><span class=\"o\">=</span><span class=\"s1\">&#39;id_for_</span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span><span class=\"p\">,</span> <span class=\"n\">label_suffix</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_ul</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;id_for_subject&quot;&gt;Subject&lt;/label&gt; &lt;input id=&quot;id_for_subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;id_for_message&quot;&gt;Message&lt;/label&gt; &lt;input type=&quot;text&quot; name=&quot;message&quot; id=&quot;id_for_message&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;id_for_sender&quot;&gt;Sender&lt;/label&gt; &lt;input type=&quot;email&quot; name=&quot;sender&quot; id=&quot;id_for_sender&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;id_for_cc_myself&quot;&gt;Cc myself&lt;/label&gt; &lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; id=&quot;id_for_cc_myself&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">auto_id</span><span class=\"o\">=</span><span class=\"s1\">&#39;id_for_</span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span><span class=\"p\">,</span> <span class=\"n\">label_suffix</span><span class=\"o\">=</span><span class=\"s1\">&#39; -&gt;&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_ul</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;id_for_subject&quot;&gt;Subject -&gt;&lt;/label&gt; &lt;input id=&quot;id_for_subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;id_for_message&quot;&gt;Message -&gt;&lt;/label&gt; &lt;input type=&quot;text&quot; name=&quot;message&quot; id=&quot;id_for_message&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;id_for_sender&quot;&gt;Sender -&gt;&lt;/label&gt; &lt;input type=&quot;email&quot; name=&quot;sender&quot; id=&quot;id_for_sender&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;id_for_cc_myself&quot;&gt;Cc myself -&gt;&lt;/label&gt; &lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; id=&quot;id_for_cc_myself&quot; /&gt;&lt;/li&gt;</span>\n</code></pre></div>\n<p>Note that the label suffix is added only if the last character of the\nlabel isn’t a punctuation character (in English, those are <code class=\"docutils literal notranslate\"><span class=\"pre\">.</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">!</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">?</span></code>\nor <code class=\"docutils literal notranslate\"><span class=\"pre\">:</span></code>).</p>\n<aside class=\"version-note version-added\" data-version=\"1.8\">\n<p class=\"version-note-title\">New in Django 1.8</p></aside>\n<p>Fields can also define their own <a class=\"reference internal\" href=\"/en/1.8/ref/forms/fields/#django.forms.Field.label_suffix\" title=\"django.forms.Field.label_suffix\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">label_suffix</span></code></a>.\nThis will take precedence over <a class=\"reference internal\" href=\"#django.forms.Form.label_suffix\" title=\"django.forms.Form.label_suffix\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Form.label_suffix</span></code></a>. The suffix can also be overridden at runtime\nusing the <code class=\"docutils literal notranslate\"><span class=\"pre\">label_suffix</span></code> parameter to\n<a class=\"reference internal\" href=\"#django.forms.BoundField.label_tag\" title=\"django.forms.BoundField.label_tag\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">label_tag()</span></code></a>.</p>\n</section>\n<section id=\"notes-on-field-ordering\">\n<h3>Notes on field ordering<a class=\"heading-anchor\" href=\"#notes-on-field-ordering\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>In the <code class=\"docutils literal notranslate\"><span class=\"pre\">as_p()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">as_ul()</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">as_table()</span></code> shortcuts, the fields are\ndisplayed in the order in which you define them in your form class. For\nexample, in the <code class=\"docutils literal notranslate\"><span class=\"pre\">ContactForm</span></code> example, the fields are defined in the order\n<code class=\"docutils literal notranslate\"><span class=\"pre\">subject</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">message</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">cc_myself</span></code>. To reorder the HTML\noutput, just change the order in which those fields are listed in the class.</p>\n</section>\n<section id=\"how-errors-are-displayed\">\n<h3>How errors are displayed<a class=\"heading-anchor\" href=\"#how-errors-are-displayed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>If you render a bound <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code> object, the act of rendering will automatically\nrun the form’s validation if it hasn’t already happened, and the HTML output\nwill include the validation errors as a <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;ul</span> <span class=\"pre\">class=&quot;errorlist&quot;&gt;</span></code> near the\nfield. The particular positioning of the error messages depends on the output\nmethod you’re using:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Hi there&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;sender&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;invalid email address&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;cc_myself&#39;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">auto_id</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_table</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;Subject:&lt;/th&gt;&lt;td&gt;&lt;ul class=&quot;errorlist&quot;&gt;&lt;li&gt;This field is required.&lt;/li&gt;&lt;/ul&gt;&lt;input type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;Message:&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;message&quot; value=&quot;Hi there&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;Sender:&lt;/th&gt;&lt;td&gt;&lt;ul class=&quot;errorlist&quot;&gt;&lt;li&gt;Enter a valid email address.&lt;/li&gt;&lt;/ul&gt;&lt;input type=&quot;email&quot; name=&quot;sender&quot; value=&quot;invalid email address&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;Cc myself:&lt;/th&gt;&lt;td&gt;&lt;input checked=&quot;checked&quot; type=&quot;checkbox&quot; name=&quot;cc_myself&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_ul</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;li&gt;&lt;ul class=&quot;errorlist&quot;&gt;&lt;li&gt;This field is required.&lt;/li&gt;&lt;/ul&gt;Subject: &lt;input type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;Message: &lt;input type=&quot;text&quot; name=&quot;message&quot; value=&quot;Hi there&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;&lt;ul class=&quot;errorlist&quot;&gt;&lt;li&gt;Enter a valid email address.&lt;/li&gt;&lt;/ul&gt;Sender: &lt;input type=&quot;email&quot; name=&quot;sender&quot; value=&quot;invalid email address&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;Cc myself: &lt;input checked=&quot;checked&quot; type=&quot;checkbox&quot; name=&quot;cc_myself&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_p</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;p&gt;&lt;ul class=&quot;errorlist&quot;&gt;&lt;li&gt;This field is required.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</span>\n<span class=\"go\">&lt;p&gt;Subject: &lt;input type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/p&gt;</span>\n<span class=\"go\">&lt;p&gt;Message: &lt;input type=&quot;text&quot; name=&quot;message&quot; value=&quot;Hi there&quot; /&gt;&lt;/p&gt;</span>\n<span class=\"go\">&lt;p&gt;&lt;ul class=&quot;errorlist&quot;&gt;&lt;li&gt;Enter a valid email address.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</span>\n<span class=\"go\">&lt;p&gt;Sender: &lt;input type=&quot;email&quot; name=&quot;sender&quot; value=&quot;invalid email address&quot; /&gt;&lt;/p&gt;</span>\n<span class=\"go\">&lt;p&gt;Cc myself: &lt;input checked=&quot;checked&quot; type=&quot;checkbox&quot; name=&quot;cc_myself&quot; /&gt;&lt;/p&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"customizing-the-error-list-format\">\n<h3>Customizing the error list format<a class=\"heading-anchor\" href=\"#customizing-the-error-list-format\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>By default, forms use <code class=\"docutils literal notranslate\"><span class=\"pre\">django.forms.utils.ErrorList</span></code> to format validation\nerrors. If you’d like to use an alternate class for displaying errors, you can\npass that in at construction time (replace <code class=\"docutils literal notranslate\"><span class=\"pre\">__str__</span></code> by <code class=\"docutils literal notranslate\"><span class=\"pre\">__unicode__</span></code> on\nPython 2):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ErrorList</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">DivErrorList</span><span class=\"p\">(</span><span class=\"n\">ErrorList</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>              <span class=\"c1\"># __unicode__ on Python 2</span>\n<span class=\"gp\">... </span>        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">as_divs</span><span class=\"p\">()</span>\n<span class=\"gp\">... </span>    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">as_divs</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"p\">:</span> <span class=\"k\">return</span> <span class=\"s1\">&#39;&#39;</span>\n<span class=\"gp\">... </span>        <span class=\"k\">return</span> <span class=\"s1\">&#39;&lt;div class=&quot;errorlist&quot;&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/div&gt;&#39;</span> <span class=\"o\">%</span> <span class=\"s1\">&#39;&#39;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">([</span><span class=\"s1\">&#39;&lt;div class=&quot;error&quot;&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/div&gt;&#39;</span> <span class=\"o\">%</span> <span class=\"n\">e</span> <span class=\"k\">for</span> <span class=\"n\">e</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">auto_id</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">error_class</span><span class=\"o\">=</span><span class=\"n\">DivErrorList</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_p</span><span class=\"p\">()</span>\n<span class=\"go\">&lt;div class=&quot;errorlist&quot;&gt;&lt;div class=&quot;error&quot;&gt;This field is required.&lt;/div&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;p&gt;Subject: &lt;input type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/p&gt;</span>\n<span class=\"go\">&lt;p&gt;Message: &lt;input type=&quot;text&quot; name=&quot;message&quot; value=&quot;Hi there&quot; /&gt;&lt;/p&gt;</span>\n<span class=\"go\">&lt;div class=&quot;errorlist&quot;&gt;&lt;div class=&quot;error&quot;&gt;Enter a valid email address.&lt;/div&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;p&gt;Sender: &lt;input type=&quot;email&quot; name=&quot;sender&quot; value=&quot;invalid email address&quot; /&gt;&lt;/p&gt;</span>\n<span class=\"go\">&lt;p&gt;Cc myself: &lt;input checked=&quot;checked&quot; type=&quot;checkbox&quot; name=&quot;cc_myself&quot; /&gt;&lt;/p&gt;</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"1.7\">\n<p class=\"version-note-title\">Changed in Django 1.7</p><p><code class=\"docutils literal notranslate\"><span class=\"pre\">django.forms.util</span></code> was renamed to <code class=\"docutils literal notranslate\"><span class=\"pre\">django.forms.utils</span></code>.</p>\n</aside>\n</section>\n<section id=\"more-granular-output\">\n<h3>More granular output<a class=\"heading-anchor\" href=\"#more-granular-output\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">as_p()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">as_ul()</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">as_table()</span></code> methods are simply shortcuts for\nlazy developers – they’re not the only way a form object can be displayed.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.BoundField\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">BoundField</span></span><a class=\"heading-anchor\" href=\"#django.forms.BoundField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Used to display HTML or access attributes for a single field of a\n<a class=\"reference internal\" href=\"#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> instance.</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">__str__()</span></code> (<code class=\"docutils literal notranslate\"><span class=\"pre\">__unicode__</span></code> on Python 2) method of this\nobject displays the HTML for this field.</p>\n</dd></dl>\n\n<p>To retrieve a single <code class=\"docutils literal notranslate\"><span class=\"pre\">BoundField</span></code>, use dictionary lookup syntax on your form\nusing the field’s name as the key:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"p\">[</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;input id=&quot;id_subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;</span>\n</code></pre></div>\n<p>To retrieve all <code class=\"docutils literal notranslate\"><span class=\"pre\">BoundField</span></code> objects, iterate the form:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> <span class=\"n\">boundfield</span> <span class=\"ow\">in</span> <span class=\"n\">form</span><span class=\"p\">:</span> <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">boundfield</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;input id=&quot;id_subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;</span>\n<span class=\"go\">&lt;input type=&quot;text&quot; name=&quot;message&quot; id=&quot;id_message&quot; /&gt;</span>\n<span class=\"go\">&lt;input type=&quot;email&quot; name=&quot;sender&quot; id=&quot;id_sender&quot; /&gt;</span>\n<span class=\"go\">&lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; id=&quot;id_cc_myself&quot; /&gt;</span>\n</code></pre></div>\n<p>The field-specific output honors the form object’s <code class=\"docutils literal notranslate\"><span class=\"pre\">auto_id</span></code> setting:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">auto_id</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">[</span><span class=\"s1\">&#39;message&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;input type=&quot;text&quot; name=&quot;message&quot; /&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">auto_id</span><span class=\"o\">=</span><span class=\"s1\">&#39;id_</span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">[</span><span class=\"s1\">&#39;message&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;input type=&quot;text&quot; name=&quot;message&quot; id=&quot;id_message&quot; /&gt;</span>\n</code></pre></div>\n<p>For a field’s list of errors, access the field’s <code class=\"docutils literal notranslate\"><span class=\"pre\">errors</span></code> attribute.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.BoundField.errors\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">BoundField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">errors</span></span><a class=\"heading-anchor\" href=\"#django.forms.BoundField.errors\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A list-like object that is displayed as an HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;ul</span> <span class=\"pre\">class=&quot;errorlist&quot;&gt;</span></code>\nwhen printed:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;hi&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;sender&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;cc_myself&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">auto_id</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">[</span><span class=\"s1\">&#39;message&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;input type=&quot;text&quot; name=&quot;message&quot; /&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"p\">[</span><span class=\"s1\">&#39;message&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">errors</span>\n<span class=\"go\">[&#39;This field is required.&#39;]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">[</span><span class=\"s1\">&#39;message&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">errors</span><span class=\"p\">)</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=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"p\">[</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">errors</span>\n<span class=\"go\">[]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">[</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">errors</span><span class=\"p\">)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">[</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">errors</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;&#39;</span>\n</code></pre></div>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.BoundField.label_tag\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">BoundField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">label_tag</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">contents</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">attrs</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">label_suffix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.BoundField.label_tag\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>To separately render the label tag of a form field, you can call its\n<code class=\"docutils literal notranslate\"><span class=\"pre\">label_tag</span></code> method:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">[</span><span class=\"s1\">&#39;message&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">label_tag</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;label for=&quot;id_message&quot;&gt;Message:&lt;/label&gt;</span>\n</code></pre></div>\n<p>Optionally, you can provide the <code class=\"docutils literal notranslate\"><span class=\"pre\">contents</span></code> parameter which will replace the\nauto-generated label tag. An optional <code class=\"docutils literal notranslate\"><span class=\"pre\">attrs</span></code> dictionary may contain\nadditional attributes for the <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> tag.</p>\n<p>The HTML that’s generated includes the form’s\n<a class=\"reference internal\" href=\"#django.forms.Form.label_suffix\" title=\"django.forms.Form.label_suffix\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">label_suffix</span></code></a> (a colon, by default) or, if set, the\ncurrent field’s <a class=\"reference internal\" href=\"/en/1.8/ref/forms/fields/#django.forms.Field.label_suffix\" title=\"django.forms.Field.label_suffix\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">label_suffix</span></code></a>. The optional\n<code class=\"docutils literal notranslate\"><span class=\"pre\">label_suffix</span></code> parameter allows you to override any previously set\nsuffix. For example, you can use an empty string to hide the label on selected\nfields. If you need to do this in a template, you could write a custom\nfilter to allow passing parameters to <code class=\"docutils literal notranslate\"><span class=\"pre\">label_tag</span></code>.</p>\n<aside class=\"version-note version-changed\" data-version=\"1.8\">\n<p class=\"version-note-title\">Changed in Django 1.8</p><p>The label includes <a class=\"reference internal\" href=\"#django.forms.Form.required_css_class\" title=\"django.forms.Form.required_css_class\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">required_css_class</span></code></a> if applicable.</p>\n</aside>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.BoundField.css_classes\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">BoundField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">css_classes</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.BoundField.css_classes\"><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 use Django’s rendering shortcuts, CSS classes are used to\nindicate required form fields or fields that contain errors. If you’re\nmanually rendering a form, you can access these CSS classes using the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">css_classes</span></code> method:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"p\">[</span><span class=\"s1\">&#39;message&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">css_classes</span><span class=\"p\">()</span>\n<span class=\"go\">&#39;required&#39;</span>\n</code></pre></div>\n<p>If you want to provide some additional classes in addition to the\nerror and required classes that may be required, you can provide\nthose classes as an argument:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"p\">[</span><span class=\"s1\">&#39;message&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">css_classes</span><span class=\"p\">(</span><span class=\"s1\">&#39;foo bar&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;foo bar required&#39;</span>\n</code></pre></div>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.BoundField.value\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">BoundField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">value</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.BoundField.value\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Use this method to render the raw value of this field as it would be rendered\nby a <code class=\"docutils literal notranslate\"><span class=\"pre\">Widget</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">initial</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;welcome&#39;</span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">unbound_form</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">initial</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">bound_form</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">initial</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">unbound_form</span><span class=\"p\">[</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">())</span>\n<span class=\"go\">welcome</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">bound_form</span><span class=\"p\">[</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">())</span>\n<span class=\"go\">hi</span>\n</code></pre></div>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.BoundField.id_for_label\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">BoundField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">id_for_label</span></span><a class=\"heading-anchor\" href=\"#django.forms.BoundField.id_for_label\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Use this property to render the ID of this field. For example, if you are\nmanually constructing a <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> in your template (despite the fact that\n<a class=\"reference internal\" href=\"#django.forms.BoundField.label_tag\" title=\"django.forms.BoundField.label_tag\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">label_tag()</span></code></a> will do this for you):</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.my_field.id_for_label</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>...<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">my_field</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>By default, this will be the field’s name prefixed by <code class=\"docutils literal notranslate\"><span class=\"pre\">id_</span></code>\n(”<code class=\"docutils literal notranslate\"><span class=\"pre\">id_my_field</span></code>” for the example above). You may modify the ID by setting\n<a class=\"reference internal\" href=\"/en/1.8/ref/forms/widgets/#django.forms.Widget.attrs\" title=\"django.forms.Widget.attrs\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">attrs</span></code></a> on the field’s widget. For example,\ndeclaring a field like this:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">my_field</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">widget</span><span class=\"o\">=</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">TextInput</span><span class=\"p\">(</span><span class=\"n\">attrs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;id&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;myFIELD&#39;</span><span class=\"p\">}))</span>\n</code></pre></div>\n<p>and using the template above, would render something like:</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\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;myFIELD&quot;</span><span class=\"p\">&gt;</span>...<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">input</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;myFIELD&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;text&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;my_field&quot;</span> <span class=\"p\">/&gt;</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"binding-uploaded-files-to-a-form\">\n<span id=\"binding-uploaded-files\"></span><h2>Binding uploaded files to a form<a class=\"heading-anchor\" href=\"#binding-uploaded-files-to-a-form\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Dealing with forms that have <code class=\"docutils literal notranslate\"><span class=\"pre\">FileField</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">ImageField</span></code> fields\nis a little more complicated than a normal form.</p>\n<p>Firstly, in order to upload files, you’ll need to make sure that your\n<code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code> element correctly defines the <code class=\"docutils literal notranslate\"><span class=\"pre\">enctype</span></code> as\n<code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;multipart/form-data&quot;</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"o\">&lt;</span><span class=\"n\">form</span> <span class=\"n\">enctype</span><span class=\"o\">=</span><span class=\"s2\">&quot;multipart/form-data&quot;</span> <span class=\"n\">method</span><span class=\"o\">=</span><span class=\"s2\">&quot;post&quot;</span> <span class=\"n\">action</span><span class=\"o\">=</span><span class=\"s2\">&quot;/foo/&quot;</span><span class=\"o\">&gt;</span>\n</code></pre></div>\n<p>Secondly, when you use the form, you need to bind the file data. File\ndata is handled separately to normal form data, so when your form\ncontains a <code class=\"docutils literal notranslate\"><span class=\"pre\">FileField</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">ImageField</span></code>, you will need to specify\na second argument when you bind your form. So if we extend our\nContactForm to include an <code class=\"docutils literal notranslate\"><span class=\"pre\">ImageField</span></code> called <code class=\"docutils literal notranslate\"><span class=\"pre\">mugshot</span></code>, we\nneed to bind the file data containing the mugshot image:</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\"># Bound form with an image field</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.files.uploadedfile</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SimpleUploadedFile</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;hello&#39;</span><span class=\"p\">,</span>\n<span class=\"o\">...</span>         <span class=\"s1\">&#39;message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Hi there&#39;</span><span class=\"p\">,</span>\n<span class=\"o\">...</span>         <span class=\"s1\">&#39;sender&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;foo@example.com&#39;</span><span class=\"p\">,</span>\n<span class=\"o\">...</span>         <span class=\"s1\">&#39;cc_myself&#39;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">}</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">file_data</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;mugshot&#39;</span><span class=\"p\">:</span> <span class=\"n\">SimpleUploadedFile</span><span class=\"p\">(</span><span class=\"s1\">&#39;face.jpg&#39;</span><span class=\"p\">,</span> <span class=\"o\">&lt;</span><span class=\"n\">file</span> <span class=\"n\">data</span><span class=\"o\">&gt;</span><span class=\"p\">)}</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactFormWithMugshot</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">file_data</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>In practice, you will usually specify <code class=\"docutils literal notranslate\"><span class=\"pre\">request.FILES</span></code> as the source\nof file data (just like you use <code class=\"docutils literal notranslate\"><span class=\"pre\">request.POST</span></code> as the source of\nform data):</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\"># Bound form with an image field, data from the request</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactFormWithMugshot</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Constructing an unbound form is the same as always – just omit both\nform data <em>and</em> file data:</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\"># Unbound form with an image field</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactFormWithMugshot</span><span class=\"p\">()</span>\n</code></pre></div>\n<section id=\"testing-for-multipart-forms\">\n<h3>Testing for multipart forms<a class=\"heading-anchor\" href=\"#testing-for-multipart-forms\"><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.Form.is_multipart\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.</span></span><span class=\"sig-name descname\"><span class=\"pre\">is_multipart</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.Form.is_multipart\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>If you’re writing reusable views or templates, you may not know ahead of time\nwhether your form is a multipart form or not. The <code class=\"docutils literal notranslate\"><span class=\"pre\">is_multipart()</span></code> method\ntells you whether the form requires multipart encoding for submission:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactFormWithMugshot</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">is_multipart</span><span class=\"p\">()</span>\n<span class=\"go\">True</span>\n</code></pre></div>\n<p>Here’s an example of how you might use this in a template:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_multipart</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n    <span class=\"o\">&lt;</span><span class=\"n\">form</span> <span class=\"n\">enctype</span><span class=\"o\">=</span><span class=\"s2\">&quot;multipart/form-data&quot;</span> <span class=\"n\">method</span><span class=\"o\">=</span><span class=\"s2\">&quot;post&quot;</span> <span class=\"n\">action</span><span class=\"o\">=</span><span class=\"s2\">&quot;/foo/&quot;</span><span class=\"o\">&gt;</span>\n<span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">else</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n    <span class=\"o\">&lt;</span><span class=\"n\">form</span> <span class=\"n\">method</span><span class=\"o\">=</span><span class=\"s2\">&quot;post&quot;</span> <span class=\"n\">action</span><span class=\"o\">=</span><span class=\"s2\">&quot;/foo/&quot;</span><span class=\"o\">&gt;</span>\n<span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">endif</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n<span class=\"p\">{{</span> <span class=\"n\">form</span> <span class=\"p\">}}</span>\n<span class=\"o\">&lt;/</span><span class=\"n\">form</span><span class=\"o\">&gt;</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"subclassing-forms\">\n<h2>Subclassing forms<a class=\"heading-anchor\" href=\"#subclassing-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>If you have multiple <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code> classes that share fields, you can use\nsubclassing to remove redundancy.</p>\n<p>When you subclass a custom <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code> class, the resulting subclass will\ninclude all fields of the parent class(es), followed by the fields you define\nin the subclass.</p>\n<p>In this example, <code class=\"docutils literal notranslate\"><span class=\"pre\">ContactFormWithPriority</span></code> contains all the fields from\n<code class=\"docutils literal notranslate\"><span class=\"pre\">ContactForm</span></code>, plus an additional field, <code class=\"docutils literal notranslate\"><span class=\"pre\">priority</span></code>. The <code class=\"docutils literal notranslate\"><span class=\"pre\">ContactForm</span></code>\nfields are ordered first:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ContactFormWithPriority</span><span class=\"p\">(</span><span class=\"n\">ContactForm</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"n\">priority</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ContactFormWithPriority</span><span class=\"p\">(</span><span class=\"n\">auto_id</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">as_ul</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;li&gt;Subject: &lt;input type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;Message: &lt;input type=&quot;text&quot; name=&quot;message&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;Sender: &lt;input type=&quot;email&quot; name=&quot;sender&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;Cc myself: &lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;Priority: &lt;input type=&quot;text&quot; name=&quot;priority&quot; /&gt;&lt;/li&gt;</span>\n</code></pre></div>\n<p>It’s possible to subclass multiple forms, treating forms as mixins. In this\nexample, <code class=\"docutils literal notranslate\"><span class=\"pre\">BeatleForm</span></code> subclasses both <code class=\"docutils literal notranslate\"><span class=\"pre\">PersonForm</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">InstrumentForm</span></code>\n(in that order), and its field list includes the fields from the parent\nclasses:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Form</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PersonForm</span><span class=\"p\">(</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">CharField</span><span class=\"p\">()</span>\n<span class=\"gp\">... </span>    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">CharField</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">InstrumentForm</span><span class=\"p\">(</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"n\">instrument</span> <span class=\"o\">=</span> <span class=\"n\">CharField</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">BeatleForm</span><span class=\"p\">(</span><span class=\"n\">PersonForm</span><span class=\"p\">,</span> <span class=\"n\">InstrumentForm</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"n\">haircut_type</span> <span class=\"o\">=</span> <span class=\"n\">CharField</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">BeatleForm</span><span class=\"p\">(</span><span class=\"n\">auto_id</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">as_ul</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;li&gt;First name: &lt;input type=&quot;text&quot; name=&quot;first_name&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;Last name: &lt;input type=&quot;text&quot; name=&quot;last_name&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;Instrument: &lt;input type=&quot;text&quot; name=&quot;instrument&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;Haircut type: &lt;input type=&quot;text&quot; name=&quot;haircut_type&quot; /&gt;&lt;/li&gt;</span>\n</code></pre></div>\n<aside class=\"version-note version-added\" data-version=\"1.7\">\n<p class=\"version-note-title\">New in Django 1.7</p></aside>\n<p>It’s possible to declaratively remove a <code class=\"docutils literal notranslate\"><span class=\"pre\">Field</span></code> inherited from a parent class\nby setting the name of the field to <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> on the subclass. 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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ParentForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">()</span>\n<span class=\"gp\">... </span>    <span class=\"n\">age</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">()</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ChildForm</span><span class=\"p\">(</span><span class=\"n\">ParentForm</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">ChildForm</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">fields</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">()</span>\n<span class=\"gp\">... </span><span class=\"p\">[</span><span class=\"s1\">&#39;age&#39;</span><span class=\"p\">]</span>\n</code></pre></div>\n</section>\n<section id=\"prefixes-for-forms\">\n<span id=\"form-prefix\"></span><h2>Prefixes for forms<a class=\"heading-anchor\" href=\"#prefixes-for-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.Form.prefix\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Form.</span></span><span class=\"sig-name descname\"><span class=\"pre\">prefix</span></span><a class=\"heading-anchor\" href=\"#django.forms.Form.prefix\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>You can put several Django forms inside one <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code> tag. To give each\n<code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code> its own namespace, use the <code class=\"docutils literal notranslate\"><span class=\"pre\">prefix</span></code> keyword argument:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">mother</span> <span class=\"o\">=</span> <span class=\"n\">PersonForm</span><span class=\"p\">(</span><span class=\"n\">prefix</span><span class=\"o\">=</span><span class=\"s2\">&quot;mother&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">father</span> <span class=\"o\">=</span> <span class=\"n\">PersonForm</span><span class=\"p\">(</span><span class=\"n\">prefix</span><span class=\"o\">=</span><span class=\"s2\">&quot;father&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">mother</span><span class=\"o\">.</span><span class=\"n\">as_ul</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;id_mother-first_name&quot;&gt;First name:&lt;/label&gt; &lt;input type=&quot;text&quot; name=&quot;mother-first_name&quot; id=&quot;id_mother-first_name&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;id_mother-last_name&quot;&gt;Last name:&lt;/label&gt; &lt;input type=&quot;text&quot; name=&quot;mother-last_name&quot; id=&quot;id_mother-last_name&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">father</span><span class=\"o\">.</span><span class=\"n\">as_ul</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;id_father-first_name&quot;&gt;First name:&lt;/label&gt; &lt;input type=&quot;text&quot; name=&quot;father-first_name&quot; id=&quot;id_father-first_name&quot; /&gt;&lt;/li&gt;</span>\n<span class=\"go\">&lt;li&gt;&lt;label for=&quot;id_father-last_name&quot;&gt;Last name:&lt;/label&gt; &lt;input type=&quot;text&quot; name=&quot;father-last_name&quot; id=&quot;id_father-last_name&quot; /&gt;&lt;/li&gt;</span>\n</code></pre></div>\n</section>","rootId":"module-django.forms","toc":[{"title":"Bound and unbound forms","anchor":"bound-and-unbound-forms","children":[]},{"title":"Using forms to validate data","anchor":"using-forms-to-validate-data","children":[{"title":"Behavior of unbound forms","anchor":"behavior-of-unbound-forms","children":[]}]},{"title":"Dynamic initial values","anchor":"dynamic-initial-values","children":[]},{"title":"Checking which form data has changed","anchor":"checking-which-form-data-has-changed","children":[]},{"title":"Accessing the fields from the form","anchor":"accessing-the-fields-from-the-form","children":[]},{"title":"Accessing “clean” data","anchor":"accessing-clean-data","children":[]},{"title":"Outputting forms as HTML","anchor":"outputting-forms-as-html","children":[{"title":"as_p()","anchor":"as-p","children":[]},{"title":"as_ul()","anchor":"as-ul","children":[]},{"title":"as_table()","anchor":"as-table","children":[]},{"title":"Styling required or erroneous form rows","anchor":"styling-required-or-erroneous-form-rows","children":[]},{"title":"Configuring form elements’ HTML id attributes and <label> tags","anchor":"configuring-form-elements-html-id-attributes-and-label-tags","children":[]},{"title":"Notes on field ordering","anchor":"notes-on-field-ordering","children":[]},{"title":"How errors are displayed","anchor":"how-errors-are-displayed","children":[]},{"title":"Customizing the error list format","anchor":"customizing-the-error-list-format","children":[]},{"title":"More granular output","anchor":"more-granular-output","children":[]}]},{"title":"Binding uploaded files to a form","anchor":"binding-uploaded-files-to-a-form","children":[{"title":"Testing for multipart forms","anchor":"testing-for-multipart-forms","children":[]}]},{"title":"Subclassing forms","anchor":"subclassing-forms","children":[]},{"title":"Prefixes for forms","anchor":"prefixes-for-forms","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API Reference","url":"/en/1.8/ref/"},{"docname":"ref/forms/index","title":"Forms","url":"/en/1.8/ref/forms/"}],"prev":{"docname":"ref/forms/index","title":"Forms","url":"/en/1.8/ref/forms/"},"next":{"docname":"ref/forms/fields","title":"Form fields","url":"/en/1.8/ref/forms/fields/"},"formats":{"html":"/en/1.8/ref/forms/api/","markdown":"/en/1.8/ref/forms/api.md","json":"/en/1.8/ref/forms/api.json"},"source":"https://github.com/django/django/blob/stable/1.8.x/docs/ref/forms/api.txt","official":"https://docs.djangoproject.com/en/1.8/ref/forms/api/","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"]}