Sophie

Sophie

distrib > Mandriva > current > i586 > media > main-updates > by-pkgid > 57efe471f3561e70a829edf1b0e9f507 > files > 2319

python-django-1.1.4-0.1mdv2010.2.noarch.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    <title>The Forms API &mdash; Django v1.1 documentation</title>
    <link rel="stylesheet" href="../../_static/default.css" type="text/css" />
    <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '../../',
        VERSION:     '1.1',
        COLLAPSE_MODINDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true
      };
    </script>
    <script type="text/javascript" src="../../_static/jquery.js"></script>
    <script type="text/javascript" src="../../_static/doctools.js"></script>
    <link rel="top" title="Django v1.1 documentation" href="../../index.html" />
    <link rel="up" title="Forms" href="index.html" />
    <link rel="next" title="Form fields" href="fields.html" />
    <link rel="prev" title="Forms" href="index.html" />
 
<script type="text/javascript" src="../../templatebuiltins.js"></script>
<script type="text/javascript">
(function($) {
    if (!django_template_builtins) {
       // templatebuiltins.js missing, do nothing.
       return;
    }
    $(document).ready(function() {
        // Hyperlink Django template tags and filters
        var base = "../templates/builtins.html";
        if (base == "#") {
            // Special case for builtins.html itself
            base = "";
        }
        // Tags are keywords, class '.k'
        $("div.highlight\\-html\\+django span.k").each(function(i, elem) {
             var tagname = $(elem).text();
             if ($.inArray(tagname, django_template_builtins.ttags) != -1) {
                 var fragment = tagname.replace(/_/, '-');
                 $(elem).html("<a href='" + base + "#" + fragment + "'>" + tagname + "</a>");
             }
        });
        // Filters are functions, class '.nf'
        $("div.highlight\\-html\\+django span.nf").each(function(i, elem) {
             var filtername = $(elem).text();
             if ($.inArray(filtername, django_template_builtins.tfilters) != -1) {
                 var fragment = filtername.replace(/_/, '-');
                 $(elem).html("<a href='" + base + "#" + fragment + "'>" + filtername + "</a>");
             }
        });
    });
})(jQuery);
</script>

  </head>
  <body>

    <div class="document">
  <div id="custom-doc" class="yui-t6">
    <div id="hd">
      <h1><a href="../../index.html">Django v1.1 documentation</a></h1>
      <div id="global-nav">
        <a title="Home page" href="../../index.html">Home</a>  |
        <a title="Table of contents" href="../../contents.html">Table of contents</a>  |
        <a title="Global index" href="../../genindex.html">Index</a>  |
        <a title="Module index" href="../../modindex.html">Modules</a>
      </div>
      <div class="nav">
    &laquo; <a href="index.html" title="Forms">previous</a> 
     |
    <a href="../index.html" title="API Reference" accesskey="U">up</a>
   |
    <a href="fields.html" title="Form fields">next</a> &raquo;</div>
    </div>
    
    <div id="bd">
      <div id="yui-main">
        <div class="yui-b">
          <div class="yui-g" id="ref-forms-api">
            
  <div class="section" id="s-module-django.forms.forms">
<span id="s-ref-forms-api"></span><span id="module-django.forms.forms"></span><span id="ref-forms-api"></span><h1>The Forms API<a class="headerlink" href="#module-django.forms.forms" title="Permalink to this headline">¶</a></h1>
<div class="admonition-about-this-document admonition ">
<p class="first admonition-title">About this document</p>
<p class="last">This document covers the gritty details of Django&#8217;s forms API. You should
read the <a class="reference external" href="../../topics/forms/index.html#topics-forms-index"><em>introduction to working with forms</em></a>
first.</p>
</div>
<div class="section" id="s-bound-and-unbound-forms">
<span id="s-ref-forms-api-bound-unbound"></span><span id="bound-and-unbound-forms"></span><span id="ref-forms-api-bound-unbound"></span><h2>Bound and unbound forms<a class="headerlink" href="#bound-and-unbound-forms" title="Permalink to this headline">¶</a></h2>
<p>A <a title="django.forms.Form" class="reference internal" href="#django.forms.Form"><tt class="xref docutils literal"><span class="pre">Form</span></tt></a> instance is either <strong>bound</strong> to a set of data, or <strong>unbound</strong>.</p>
<ul class="simple">
<li>If it&#8217;s <strong>bound</strong> to a set of data, it&#8217;s capable of validating that data
and rendering the form as HTML with the data displayed in the HTML.</li>
<li>If it&#8217;s <strong>unbound</strong>, it cannot do validation (because there&#8217;s no data to
validate!), but it can still render the blank form as HTML.</li>
</ul>
<dl class="class">
<dt id="django.forms.Form">
<em class="property">class </em><tt class="descname">Form</tt><a class="headerlink" href="#django.forms.Form" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<p>To create an unbound <a title="django.forms.Form" class="reference internal" href="#django.forms.Form"><tt class="xref docutils literal"><span class="pre">Form</span></tt></a> instance, simply instantiate the class:</p>
<div class="highlight-python"><div class="highlight"><pre><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>
</pre></div>
</div>
<p>To bind data to a form, pass the data as a dictionary as the first parameter to
your <a title="django.forms.Form" class="reference internal" href="#django.forms.Form"><tt class="xref docutils literal"><span class="pre">Form</span></tt></a> class constructor:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;subject&#39;</span><span class="p">:</span> <span class="s">&#39;hello&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;message&#39;</span><span class="p">:</span> <span class="s">&#39;Hi there&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;sender&#39;</span><span class="p">:</span> <span class="s">&#39;foo@example.com&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;cc_myself&#39;</span><span class="p">:</span> <span class="bp">True</span><span class="p">}</span>
<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>
</pre></div>
</div>
<p>In this dictionary, the keys are the field names, which correspond to the
attributes in your <a title="django.forms.Form" class="reference internal" href="#django.forms.Form"><tt class="xref docutils literal"><span class="pre">Form</span></tt></a> class. The values are the data you're trying to
validate. These will usually be strings, but there's no requirement that they be
strings; the type of data you pass depends on the <a title="django.forms.Field" class="reference external" href="fields.html#django.forms.Field"><tt class="xref docutils literal"><span class="pre">Field</span></tt></a>, as we'll see
in a moment.</p>
<dl class="attribute">
<dt id="django.forms.Form.is_bound">
<tt class="descclassname">Form.</tt><tt class="descname">is_bound</tt><a class="headerlink" href="#django.forms.Form.is_bound" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<p>If you need to distinguish between bound and unbound form instances at runtime,
check the value of the form's <a title="django.forms.Form.is_bound" class="reference internal" href="#django.forms.Form.is_bound"><tt class="xref docutils literal"><span class="pre">is_bound</span></tt></a> attribute:</p>
<div class="highlight-python"><div class="highlight"><pre><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="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="o">.</span><span class="n">is_bound</span>
<span class="go">False</span>
<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="s">&#39;subject&#39;</span><span class="p">:</span> <span class="s">&#39;hello&#39;</span><span class="p">})</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="o">.</span><span class="n">is_bound</span>
<span class="go">True</span>
</pre></div>
</div>
<p>Note that passing an empty dictionary creates a <em>bound</em> form with empty data:</p>
<div class="highlight-python"><div class="highlight"><pre><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="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="o">.</span><span class="n">is_bound</span>
<span class="go">True</span>
</pre></div>
</div>
<p>If you have a bound <a title="django.forms.Form" class="reference internal" href="#django.forms.Form"><tt class="xref docutils literal"><span class="pre">Form</span></tt></a> instance and want to change the data somehow,
or if you want to bind an unbound <a title="django.forms.Form" class="reference internal" href="#django.forms.Form"><tt class="xref docutils literal"><span class="pre">Form</span></tt></a> instance to some data, create
another <a title="django.forms.Form" class="reference internal" href="#django.forms.Form"><tt class="xref docutils literal"><span class="pre">Form</span></tt></a> instance. There is no way to change data in a
<a title="django.forms.Form" class="reference internal" href="#django.forms.Form"><tt class="xref docutils literal"><span class="pre">Form</span></tt></a> instance. Once a <a title="django.forms.Form" class="reference internal" href="#django.forms.Form"><tt class="xref docutils literal"><span class="pre">Form</span></tt></a> instance has been created, you
should consider its data immutable, whether it has data or not.</p>
</div>
<div class="section" id="s-using-forms-to-validate-data">
<span id="using-forms-to-validate-data"></span><h2>Using forms to validate data<a class="headerlink" href="#using-forms-to-validate-data" title="Permalink to this headline">¶</a></h2>
<dl class="method">
<dt id="django.forms.Form.is_valid">
<tt class="descclassname">Form.</tt><tt class="descname">is_valid</tt>()<a class="headerlink" href="#django.forms.Form.is_valid" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<p>The primary task of a <a title="django.forms.Form" class="reference internal" href="#django.forms.Form"><tt class="xref docutils literal"><span class="pre">Form</span></tt></a> object is to validate data. With a bound
<a title="django.forms.Form" class="reference internal" href="#django.forms.Form"><tt class="xref docutils literal"><span class="pre">Form</span></tt></a> instance, call the <a title="django.forms.Form.is_valid" class="reference internal" href="#django.forms.Form.is_valid"><tt class="xref docutils literal"><span class="pre">is_valid()</span></tt></a> method to run validation
and return a boolean designating whether the data was valid:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;subject&#39;</span><span class="p">:</span> <span class="s">&#39;hello&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;message&#39;</span><span class="p">:</span> <span class="s">&#39;Hi there&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;sender&#39;</span><span class="p">:</span> <span class="s">&#39;foo@example.com&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;cc_myself&#39;</span><span class="p">:</span> <span class="bp">True</span><span class="p">}</span>
<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="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="o">.</span><span class="n">is_valid</span><span class="p">()</span>
<span class="go">True</span>
</pre></div>
</div>
<p>Let's try with some invalid data. In this case, <tt class="docutils literal"><span class="pre">subject</span></tt> is blank (an error,
because all fields are required by default) and <tt class="docutils literal"><span class="pre">sender</span></tt> is not a valid
e-mail address:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;subject&#39;</span><span class="p">:</span> <span class="s">&#39;&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;message&#39;</span><span class="p">:</span> <span class="s">&#39;Hi there&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;sender&#39;</span><span class="p">:</span> <span class="s">&#39;invalid e-mail address&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;cc_myself&#39;</span><span class="p">:</span> <span class="bp">True</span><span class="p">}</span>
<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="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="o">.</span><span class="n">is_valid</span><span class="p">()</span>
<span class="go">False</span>
</pre></div>
</div>
<dl class="attribute">
<dt id="django.forms.Form.errors">
<tt class="descclassname">Form.</tt><tt class="descname">errors</tt><a class="headerlink" href="#django.forms.Form.errors" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<p>Access the <a title="django.forms.Form.errors" class="reference internal" href="#django.forms.Form.errors"><tt class="xref docutils literal"><span class="pre">errors</span></tt></a> attribute to get a dictionary of error
messages:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="o">.</span><span class="n">errors</span>
<span class="go">{&#39;sender&#39;: [u&#39;Enter a valid e-mail address.&#39;], &#39;subject&#39;: [u&#39;This field is required.&#39;]}</span>
</pre></div>
</div>
<p>In this dictionary, the keys are the field names, and the values are lists of
Unicode strings representing the error messages. The error messages are stored
in lists because a field can have multiple error messages.</p>
<p>You can access <a title="django.forms.Form.errors" class="reference internal" href="#django.forms.Form.errors"><tt class="xref docutils literal"><span class="pre">errors</span></tt></a> without having to call
<a title="django.forms.Form.is_valid" class="reference internal" href="#django.forms.Form.is_valid"><tt class="xref docutils literal"><span class="pre">is_valid()</span></tt></a> first. The form's data will be validated the first time
either you call <a title="django.forms.Form.is_valid" class="reference internal" href="#django.forms.Form.is_valid"><tt class="xref docutils literal"><span class="pre">is_valid()</span></tt></a> or access <a title="django.forms.Form.errors" class="reference internal" href="#django.forms.Form.errors"><tt class="xref docutils literal"><span class="pre">errors</span></tt></a>.</p>
<p>The validation routines will only get called once, regardless of how many times
you access <a title="django.forms.Form.errors" class="reference internal" href="#django.forms.Form.errors"><tt class="xref docutils literal"><span class="pre">errors</span></tt></a> or call <a title="django.forms.Form.is_valid" class="reference internal" href="#django.forms.Form.is_valid"><tt class="xref docutils literal"><span class="pre">is_valid()</span></tt></a>. This means that
if validation has side effects, those side effects will only be triggered once.</p>
<div class="section" id="s-behavior-of-unbound-forms">
<span id="behavior-of-unbound-forms"></span><h3>Behavior of unbound forms<a class="headerlink" href="#behavior-of-unbound-forms" title="Permalink to this headline">¶</a></h3>
<p>It's meaningless to validate a form with no data, but, for the record, here's
what happens with unbound forms:</p>
<div class="highlight-python"><div class="highlight"><pre><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="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="o">.</span><span class="n">is_valid</span><span class="p">()</span>
<span class="go">False</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="o">.</span><span class="n">errors</span>
<span class="go">{}</span>
</pre></div>
</div>
</div>
</div>
<div class="section" id="s-dynamic-initial-values">
<span id="dynamic-initial-values"></span><h2>Dynamic initial values<a class="headerlink" href="#dynamic-initial-values" title="Permalink to this headline">¶</a></h2>
<dl class="attribute">
<dt id="django.forms.Form.initial">
<tt class="descclassname">Form.</tt><tt class="descname">initial</tt><a class="headerlink" href="#django.forms.Form.initial" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<p>Use <a title="django.forms.Form.initial" class="reference internal" href="#django.forms.Form.initial"><tt class="xref docutils literal"><span class="pre">initial</span></tt></a> to declare the initial value of form fields at
runtime. For example, you might want to fill in a <tt class="docutils literal"><span class="pre">username</span></tt> field with the
username of the current session.</p>
<p>To accomplish this, use the <a title="django.forms.Form.initial" class="reference internal" href="#django.forms.Form.initial"><tt class="xref docutils literal"><span class="pre">initial</span></tt></a> argument to a <a title="django.forms.Form" class="reference internal" href="#django.forms.Form"><tt class="xref docutils literal"><span class="pre">Form</span></tt></a>.
This argument, if given, should be a dictionary mapping field names to initial
values. Only include the fields for which you're specifying an initial value;
it's not necessary to include every field in your form. For example:</p>
<div class="highlight-python"><div class="highlight"><pre><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="s">&#39;subject&#39;</span><span class="p">:</span> <span class="s">&#39;Hi there!&#39;</span><span class="p">})</span>
</pre></div>
</div>
<p>These values are only displayed for unbound forms, and they're not used as
fallback values if a particular value isn't provided.</p>
<p>Note that if a <tt class="xref docutils literal"><span class="pre">Field</span></tt> defines
<a title="django.forms.Form.initial" class="reference internal" href="#django.forms.Form.initial"><tt class="xref docutils literal"><span class="pre">initial</span></tt></a> <em>and</em> you include <tt class="docutils literal"><span class="pre">initial</span></tt> when instantiating the
<tt class="docutils literal"><span class="pre">Form</span></tt>, then the latter <tt class="docutils literal"><span class="pre">initial</span></tt> will have precedence. In this example,
<tt class="docutils literal"><span class="pre">initial</span></tt> is provided both at the field level and at the form instance level,
and the latter gets precedence:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">class</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>
<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="s">&#39;class&#39;</span><span class="p">)</span>
<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>
<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>
<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="s">&#39;name&#39;</span><span class="p">:</span> <span class="s">&#39;instance&#39;</span><span class="p">},</span> <span class="n">auto_id</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span>
<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>
<span class="go">&lt;tr&gt;&lt;th&gt;Url:&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;url&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>
<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>
</pre></div>
</div>
</div>
<div class="section" id="s-accessing-clean-data">
<span id="accessing-clean-data"></span><h2>Accessing &quot;clean&quot; data<a class="headerlink" href="#accessing-clean-data" title="Permalink to this headline">¶</a></h2>
<dl class="attribute">
<dt id="django.forms.Form.cleaned_data">
<tt class="descclassname">Form.</tt><tt class="descname">cleaned_data</tt><a class="headerlink" href="#django.forms.Form.cleaned_data" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<p>Each field in a <a title="django.forms.Form" class="reference internal" href="#django.forms.Form"><tt class="xref docutils literal"><span class="pre">Form</span></tt></a> class is responsible not only for validating
data, but also for &quot;cleaning&quot; it -- normalizing it to a consistent format. This
is a nice feature, because it allows data for a particular field to be input in
a variety of ways, always resulting in consistent output.</p>
<p>For example, <a title="django.forms.DateField" class="reference external" href="fields.html#django.forms.DateField"><tt class="xref docutils literal"><span class="pre">DateField</span></tt></a> normalizes input into a
Python <tt class="docutils literal"><span class="pre">datetime.date</span></tt> object. Regardless of whether you pass it a string in
the format <tt class="docutils literal"><span class="pre">'1994-07-15'</span></tt>, a <tt class="docutils literal"><span class="pre">datetime.date</span></tt> object, or a number of other
formats, <tt class="docutils literal"><span class="pre">DateField</span></tt> will always normalize it to a <tt class="docutils literal"><span class="pre">datetime.date</span></tt> object
as long as it's valid.</p>
<p>Once you've created a <a title="django.forms.Form" class="reference internal" href="#django.forms.Form"><tt class="xref docutils literal"><span class="pre">Form</span></tt></a> instance with a set of data and validated
it, you can access the clean data via its <tt class="docutils literal"><span class="pre">cleaned_data</span></tt> attribute:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;subject&#39;</span><span class="p">:</span> <span class="s">&#39;hello&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;message&#39;</span><span class="p">:</span> <span class="s">&#39;Hi there&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;sender&#39;</span><span class="p">:</span> <span class="s">&#39;foo@example.com&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;cc_myself&#39;</span><span class="p">:</span> <span class="bp">True</span><span class="p">}</span>
<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="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="o">.</span><span class="n">is_valid</span><span class="p">()</span>
<span class="go">True</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="o">.</span><span class="n">cleaned_data</span>
<span class="go">{&#39;cc_myself&#39;: True, &#39;message&#39;: u&#39;Hi there&#39;, &#39;sender&#39;: u&#39;foo@example.com&#39;, &#39;subject&#39;: u&#39;hello&#39;}</span>
</pre></div>
</div>
<div class="versionchanged">
<span class="title">Changed in Django 1.0:</span> The <tt class="docutils literal"><span class="pre">cleaned_data</span></tt> attribute was called <tt class="docutils literal"><span class="pre">clean_data</span></tt> in earlier releases.</div>
<p>Note that any text-based field -- such as <tt class="docutils literal"><span class="pre">CharField</span></tt> or <tt class="docutils literal"><span class="pre">EmailField</span></tt> --
always cleans the input into a Unicode string. We'll cover the encoding
implications later in this document.</p>
<p>If your data does <em>not</em> validate, your <tt class="docutils literal"><span class="pre">Form</span></tt> instance will not have a
<tt class="docutils literal"><span class="pre">cleaned_data</span></tt> attribute:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;subject&#39;</span><span class="p">:</span> <span class="s">&#39;&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;message&#39;</span><span class="p">:</span> <span class="s">&#39;Hi there&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;sender&#39;</span><span class="p">:</span> <span class="s">&#39;invalid e-mail address&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;cc_myself&#39;</span><span class="p">:</span> <span class="bp">True</span><span class="p">}</span>
<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="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="o">.</span><span class="n">is_valid</span><span class="p">()</span>
<span class="go">False</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="o">.</span><span class="n">cleaned_data</span>
<span class="gt">Traceback (most recent call last):</span>
<span class="c">...</span>
<span class="nc">AttributeError</span>: <span class="n-Identifier">&#39;ContactForm&#39; object has no attribute &#39;cleaned_data&#39;</span>
</pre></div>
</div>
<p><tt class="docutils literal"><span class="pre">cleaned_data</span></tt> will always <em>only</em> contain a key for fields defined in the
<tt class="docutils literal"><span class="pre">Form</span></tt>, even if you pass extra data when you define the <tt class="docutils literal"><span class="pre">Form</span></tt>. In this
example, we pass a bunch of extra fields to the <tt class="docutils literal"><span class="pre">ContactForm</span></tt> constructor,
but <tt class="docutils literal"><span class="pre">cleaned_data</span></tt> contains only the form's fields:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;subject&#39;</span><span class="p">:</span> <span class="s">&#39;hello&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;message&#39;</span><span class="p">:</span> <span class="s">&#39;Hi there&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;sender&#39;</span><span class="p">:</span> <span class="s">&#39;foo@example.com&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;cc_myself&#39;</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;extra_field_1&#39;</span><span class="p">:</span> <span class="s">&#39;foo&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;extra_field_2&#39;</span><span class="p">:</span> <span class="s">&#39;bar&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;extra_field_3&#39;</span><span class="p">:</span> <span class="s">&#39;baz&#39;</span><span class="p">}</span>
<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="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="o">.</span><span class="n">is_valid</span><span class="p">()</span>
<span class="go">True</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="o">.</span><span class="n">cleaned_data</span> <span class="c"># Doesn&#39;t contain extra_field_1, etc.</span>
<span class="go">{&#39;cc_myself&#39;: True, &#39;message&#39;: u&#39;Hi there&#39;, &#39;sender&#39;: u&#39;foo@example.com&#39;, &#39;subject&#39;: u&#39;hello&#39;}</span>
</pre></div>
</div>
<p><tt class="docutils literal"><span class="pre">cleaned_data</span></tt> will include a key and value for <em>all</em> fields defined in the
<tt class="docutils literal"><span class="pre">Form</span></tt>, even if the data didn't include a value for fields that are not
required. In this example, the data dictionary doesn't include a value for the
<tt class="docutils literal"><span class="pre">nick_name</span></tt> field, but <tt class="docutils literal"><span class="pre">cleaned_data</span></tt> includes it, with an empty value:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">OptionalPersonForm</span><span class="p">(</span><span class="n">Form</span><span class="p">):</span>
<span class="gp">... </span>    <span class="n">first_name</span> <span class="o">=</span> <span class="n">CharField</span><span class="p">()</span>
<span class="gp">... </span>    <span class="n">last_name</span> <span class="o">=</span> <span class="n">CharField</span><span class="p">()</span>
<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="bp">False</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;first_name&#39;</span><span class="p">:</span> <span class="s">u&#39;John&#39;</span><span class="p">,</span> <span class="s">&#39;last_name&#39;</span><span class="p">:</span> <span class="s">u&#39;Lennon&#39;</span><span class="p">}</span>
<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>
<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>
<span class="go">True</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="o">.</span><span class="n">cleaned_data</span>
<span class="go">{&#39;nick_name&#39;: u&#39;&#39;, &#39;first_name&#39;: u&#39;John&#39;, &#39;last_name&#39;: u&#39;Lennon&#39;}</span>
</pre></div>
</div>
<p>In this above example, the <tt class="docutils literal"><span class="pre">cleaned_data</span></tt> value for <tt class="docutils literal"><span class="pre">nick_name</span></tt> is set to an
empty string, because <tt class="docutils literal"><span class="pre">nick_name</span></tt> is <tt class="docutils literal"><span class="pre">CharField</span></tt>, and <tt class="docutils literal"><span class="pre">CharField</span></tt>s treat
empty values as an empty string. Each field type knows what its &quot;blank&quot; value
is -- e.g., for <tt class="docutils literal"><span class="pre">DateField</span></tt>, it's <tt class="xref docutils literal"><span class="pre">None</span></tt> instead of the empty string. For
full details on each field's behavior in this case, see the &quot;Empty value&quot; note
for each field in the &quot;Built-in <tt class="docutils literal"><span class="pre">Field</span></tt> classes&quot; section below.</p>
<p>You can write code to perform validation for particular form fields (based on
their name) or for the form as a whole (considering combinations of various
fields). More information about this is in <a class="reference external" href="validation.html#ref-forms-validation"><em>Form and field validation</em></a>.</p>
</div>
<div class="section" id="s-outputting-forms-as-html">
<span id="outputting-forms-as-html"></span><h2>Outputting forms as HTML<a class="headerlink" href="#outputting-forms-as-html" title="Permalink to this headline">¶</a></h2>
<p>The second task of a <tt class="docutils literal"><span class="pre">Form</span></tt> object is to render itself as HTML. To do so,
simply <tt class="docutils literal"><span class="pre">print</span></tt> it:</p>
<div class="highlight-python"><div class="highlight"><pre><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="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span>
<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>
<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>
<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;text&quot; name=&quot;sender&quot; id=&quot;id_sender&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>
<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>
</pre></div>
</div>
<p>If the form is bound to data, the HTML output will include that data
appropriately. For example, if a field is represented by an
<tt class="docutils literal"><span class="pre">&lt;input</span> <span class="pre">type=&quot;text&quot;&gt;</span></tt>, the data will be in the <tt class="docutils literal"><span class="pre">value</span></tt> attribute. If a
field is represented by an <tt class="docutils literal"><span class="pre">&lt;input</span> <span class="pre">type=&quot;checkbox&quot;&gt;</span></tt>, then that HTML will
include <tt class="docutils literal"><span class="pre">checked=&quot;checked&quot;</span></tt> if appropriate:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;subject&#39;</span><span class="p">:</span> <span class="s">&#39;hello&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;message&#39;</span><span class="p">:</span> <span class="s">&#39;Hi there&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;sender&#39;</span><span class="p">:</span> <span class="s">&#39;foo@example.com&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;cc_myself&#39;</span><span class="p">:</span> <span class="bp">True</span><span class="p">}</span>
<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="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span>
<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>
<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>
<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;text&quot; name=&quot;sender&quot; id=&quot;id_sender&quot; value=&quot;foo@example.com&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>
<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>
</pre></div>
</div>
<p>This default output is a two-column HTML table, with a <tt class="docutils literal"><span class="pre">&lt;tr&gt;</span></tt> for each field.
Notice the following:</p>
<ul class="simple">
<li>For flexibility, the output does <em>not</em> include the <tt class="docutils literal"><span class="pre">&lt;table&gt;</span></tt> and
<tt class="docutils literal"><span class="pre">&lt;/table&gt;</span></tt> tags, nor does it include the <tt class="docutils literal"><span class="pre">&lt;form&gt;</span></tt> and <tt class="docutils literal"><span class="pre">&lt;/form&gt;</span></tt>
tags or an <tt class="docutils literal"><span class="pre">&lt;input</span> <span class="pre">type=&quot;submit&quot;&gt;</span></tt> tag. It's your job to do that.</li>
<li>Each field type has a default HTML representation. <tt class="docutils literal"><span class="pre">CharField</span></tt> and
<tt class="docutils literal"><span class="pre">EmailField</span></tt> are represented by an <tt class="docutils literal"><span class="pre">&lt;input</span> <span class="pre">type=&quot;text&quot;&gt;</span></tt>.
<tt class="docutils literal"><span class="pre">BooleanField</span></tt> is represented by an <tt class="docutils literal"><span class="pre">&lt;input</span> <span class="pre">type=&quot;checkbox&quot;&gt;</span></tt>. Note
these are merely sensible defaults; you can specify which HTML to use for
a given field by using widgets, which we'll explain shortly.</li>
<li>The HTML <tt class="docutils literal"><span class="pre">name</span></tt> for each tag is taken directly from its attribute name
in the <tt class="docutils literal"><span class="pre">ContactForm</span></tt> class.</li>
<li>The text label for each field -- e.g. <tt class="docutils literal"><span class="pre">'Subject:'</span></tt>, <tt class="docutils literal"><span class="pre">'Message:'</span></tt> and
<tt class="docutils literal"><span class="pre">'Cc</span> <span class="pre">myself:'</span></tt> is generated from the field name by converting all
underscores to spaces and upper-casing the first letter. Again, note
these are merely sensible defaults; you can also specify labels manually.</li>
<li>Each text label is surrounded in an HTML <tt class="docutils literal"><span class="pre">&lt;label&gt;</span></tt> tag, which points
to the appropriate form field via its <tt class="docutils literal"><span class="pre">id</span></tt>. Its <tt class="docutils literal"><span class="pre">id</span></tt>, in turn, is
generated by prepending <tt class="docutils literal"><span class="pre">'id_'</span></tt> to the field name. The <tt class="docutils literal"><span class="pre">id</span></tt>
attributes and <tt class="docutils literal"><span class="pre">&lt;label&gt;</span></tt> tags are included in the output by default, to
follow best practices, but you can change that behavior.</li>
</ul>
<p>Although <tt class="docutils literal"><span class="pre">&lt;table&gt;</span></tt> output is the default output style when you <tt class="docutils literal"><span class="pre">print</span></tt> a
form, other output styles are available. Each style is available as a method on
a form object, and each rendering method returns a Unicode object.</p>
<div class="section" id="s-as-p">
<span id="as-p"></span><h3><tt class="docutils literal"><span class="pre">as_p()</span></tt><a class="headerlink" href="#as-p" title="Permalink to this headline">¶</a></h3>
<dl class="method">
<dt id="django.forms.Form.as_p">
<tt class="descclassname">Form.</tt><tt class="descname">as_p</tt>()<a class="headerlink" href="#django.forms.Form.as_p" title="Permalink to this definition">¶</a></dt>
<dd><p><tt class="docutils literal"><span class="pre">as_p()</span></tt> renders the form as a series of <tt class="docutils literal"><span class="pre">&lt;p&gt;</span></tt> tags, with each <tt class="docutils literal"><span class="pre">&lt;p&gt;</span></tt>
containing one field:</p>
<div class="highlight-python"><div class="highlight"><pre><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="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="o">.</span><span class="n">as_p</span><span class="p">()</span>
<span class="go">u&#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>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="o">.</span><span class="n">as_p</span><span class="p">()</span>
<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>
<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>
<span class="go">&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;</span>
<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>
</pre></div>
</div>
</dd></dl>

</div>
<div class="section" id="s-as-ul">
<span id="as-ul"></span><h3><tt class="docutils literal"><span class="pre">as_ul()</span></tt><a class="headerlink" href="#as-ul" title="Permalink to this headline">¶</a></h3>
<dl class="method">
<dt id="django.forms.Form.as_ul">
<tt class="descclassname">Form.</tt><tt class="descname">as_ul</tt>()<a class="headerlink" href="#django.forms.Form.as_ul" title="Permalink to this definition">¶</a></dt>
<dd><p><tt class="docutils literal"><span class="pre">as_ul()</span></tt> renders the form as a series of <tt class="docutils literal"><span class="pre">&lt;li&gt;</span></tt> tags, with each
<tt class="docutils literal"><span class="pre">&lt;li&gt;</span></tt> containing one field. It does <em>not</em> include the <tt class="docutils literal"><span class="pre">&lt;ul&gt;</span></tt> or
<tt class="docutils literal"><span class="pre">&lt;/ul&gt;</span></tt>, so that you can specify any HTML attributes on the <tt class="docutils literal"><span class="pre">&lt;ul&gt;</span></tt> for
flexibility:</p>
<div class="highlight-python"><div class="highlight"><pre><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="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="o">.</span><span class="n">as_ul</span><span class="p">()</span>
<span class="go">u&#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;text&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>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="o">.</span><span class="n">as_ul</span><span class="p">()</span>
<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>
<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>
<span class="go">&lt;li&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;/li&gt;</span>
<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>
</pre></div>
</div>
</dd></dl>

</div>
<div class="section" id="s-as-table">
<span id="as-table"></span><h3><tt class="docutils literal"><span class="pre">as_table()</span></tt><a class="headerlink" href="#as-table" title="Permalink to this headline">¶</a></h3>
<dl class="method">
<dt id="django.forms.Form.as_table">
<tt class="descclassname">Form.</tt><tt class="descname">as_table</tt>()<a class="headerlink" href="#django.forms.Form.as_table" title="Permalink to this definition">¶</a></dt>
<dd><p>Finally, <tt class="docutils literal"><span class="pre">as_table()</span></tt> outputs the form as an HTML <tt class="docutils literal"><span class="pre">&lt;table&gt;</span></tt>. This is
exactly the same as <tt class="docutils literal"><span class="pre">print</span></tt>. In fact, when you <tt class="docutils literal"><span class="pre">print</span></tt> a form object,
it calls its <tt class="docutils literal"><span class="pre">as_table()</span></tt> method behind the scenes:</p>
<div class="highlight-python"><div class="highlight"><pre><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="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="go">u&#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;text&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>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="o">.</span><span class="n">as_table</span><span class="p">()</span>
<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>
<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>
<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;text&quot; name=&quot;sender&quot; id=&quot;id_sender&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>
<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>
</pre></div>
</div>
</dd></dl>

</div>
<div class="section" id="s-configuring-html-label-tags">
<span id="s-ref-forms-api-configuring-label"></span><span id="configuring-html-label-tags"></span><span id="ref-forms-api-configuring-label"></span><h3>Configuring HTML <tt class="docutils literal"><span class="pre">&lt;label&gt;</span></tt> tags<a class="headerlink" href="#configuring-html-label-tags" title="Permalink to this headline">¶</a></h3>
<p>An HTML <tt class="docutils literal"><span class="pre">&lt;label&gt;</span></tt> tag designates which label text is associated with which
form element. This small enhancement makes forms more usable and more accessible
to assistive devices. It's always a good idea to use <tt class="docutils literal"><span class="pre">&lt;label&gt;</span></tt> tags.</p>
<p>By default, the form rendering methods include HTML <tt class="docutils literal"><span class="pre">id</span></tt> attributes on the
form elements and corresponding <tt class="docutils literal"><span class="pre">&lt;label&gt;</span></tt> tags around the labels. The <tt class="docutils literal"><span class="pre">id</span></tt>
attribute values are generated by prepending <tt class="docutils literal"><span class="pre">id_</span></tt> to the form field names.
This behavior is configurable, though, if you want to change the <tt class="docutils literal"><span class="pre">id</span></tt>
convention or remove HTML <tt class="docutils literal"><span class="pre">id</span></tt> attributes and <tt class="docutils literal"><span class="pre">&lt;label&gt;</span></tt> tags entirely.</p>
<p>Use the <tt class="docutils literal"><span class="pre">auto_id</span></tt> argument to the <tt class="docutils literal"><span class="pre">Form</span></tt> constructor to control the label
and <tt class="docutils literal"><span class="pre">id</span></tt> behavior. This argument must be <tt class="xref docutils literal"><span class="pre">True</span></tt>, <tt class="xref docutils literal"><span class="pre">False</span></tt> or a string.</p>
<p>If <tt class="docutils literal"><span class="pre">auto_id</span></tt> is <tt class="xref docutils literal"><span class="pre">False</span></tt>, then the form output will not include <tt class="docutils literal"><span class="pre">&lt;label&gt;</span></tt>
tags nor <tt class="docutils literal"><span class="pre">id</span></tt> attributes:</p>
<div class="highlight-python"><div class="highlight"><pre><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="bp">False</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="o">.</span><span class="n">as_table</span><span class="p">()</span>
<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>
<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>
<span class="go">&lt;tr&gt;&lt;th&gt;Sender:&lt;/th&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;sender&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>
<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>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="o">.</span><span class="n">as_ul</span><span class="p">()</span>
<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>
<span class="go">&lt;li&gt;Message: &lt;input type=&quot;text&quot; name=&quot;message&quot; /&gt;&lt;/li&gt;</span>
<span class="go">&lt;li&gt;Sender: &lt;input type=&quot;text&quot; name=&quot;sender&quot; /&gt;&lt;/li&gt;</span>
<span class="go">&lt;li&gt;Cc myself: &lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; /&gt;&lt;/li&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="o">.</span><span class="n">as_p</span><span class="p">()</span>
<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>
<span class="go">&lt;p&gt;Message: &lt;input type=&quot;text&quot; name=&quot;message&quot; /&gt;&lt;/p&gt;</span>
<span class="go">&lt;p&gt;Sender: &lt;input type=&quot;text&quot; name=&quot;sender&quot; /&gt;&lt;/p&gt;</span>
<span class="go">&lt;p&gt;Cc myself: &lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; /&gt;&lt;/p&gt;</span>
</pre></div>
</div>
<p>If <tt class="docutils literal"><span class="pre">auto_id</span></tt> is set to <tt class="xref docutils literal"><span class="pre">True</span></tt>, then the form output <em>will</em> include
<tt class="docutils literal"><span class="pre">&lt;label&gt;</span></tt> tags and will simply use the field name as its <tt class="docutils literal"><span class="pre">id</span></tt> for each form
field:</p>
<div class="highlight-python"><div class="highlight"><pre><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="bp">True</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="o">.</span><span class="n">as_table</span><span class="p">()</span>
<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>
<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>
<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;text&quot; name=&quot;sender&quot; id=&quot;sender&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>
<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>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="o">.</span><span class="n">as_ul</span><span class="p">()</span>
<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>
<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>
<span class="go">&lt;li&gt;&lt;label for=&quot;sender&quot;&gt;Sender:&lt;/label&gt; &lt;input type=&quot;text&quot; name=&quot;sender&quot; id=&quot;sender&quot; /&gt;&lt;/li&gt;</span>
<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>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="o">.</span><span class="n">as_p</span><span class="p">()</span>
<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>
<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>
<span class="go">&lt;p&gt;&lt;label for=&quot;sender&quot;&gt;Sender:&lt;/label&gt; &lt;input type=&quot;text&quot; name=&quot;sender&quot; id=&quot;sender&quot; /&gt;&lt;/p&gt;</span>
<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>
</pre></div>
</div>
<p>If <tt class="docutils literal"><span class="pre">auto_id</span></tt> is set to a string containing the format character <tt class="docutils literal"><span class="pre">'%s'</span></tt>,
then the form output will include <tt class="docutils literal"><span class="pre">&lt;label&gt;</span></tt> tags, and will generate <tt class="docutils literal"><span class="pre">id</span></tt>
attributes based on the format string. For example, for a format string
<tt class="docutils literal"><span class="pre">'field_%s'</span></tt>, a field named <tt class="docutils literal"><span class="pre">subject</span></tt> will get the <tt class="docutils literal"><span class="pre">id</span></tt> value
<tt class="docutils literal"><span class="pre">'field_subject'</span></tt>. Continuing our example:</p>
<div class="highlight-python"><div class="highlight"><pre><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="s">&#39;id_for_</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="o">.</span><span class="n">as_table</span><span class="p">()</span>
<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>
<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>
<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;text&quot; name=&quot;sender&quot; id=&quot;id_for_sender&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>
<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>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="o">.</span><span class="n">as_ul</span><span class="p">()</span>
<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>
<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>
<span class="go">&lt;li&gt;&lt;label for=&quot;id_for_sender&quot;&gt;Sender:&lt;/label&gt; &lt;input type=&quot;text&quot; name=&quot;sender&quot; id=&quot;id_for_sender&quot; /&gt;&lt;/li&gt;</span>
<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>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="o">.</span><span class="n">as_p</span><span class="p">()</span>
<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>
<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>
<span class="go">&lt;p&gt;&lt;label for=&quot;id_for_sender&quot;&gt;Sender:&lt;/label&gt; &lt;input type=&quot;text&quot; name=&quot;sender&quot; id=&quot;id_for_sender&quot; /&gt;&lt;/p&gt;</span>
<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>
</pre></div>
</div>
<p>If <tt class="docutils literal"><span class="pre">auto_id</span></tt> is set to any other true value -- such as a string that doesn't
include <tt class="docutils literal"><span class="pre">%s</span></tt> -- then the library will act as if <tt class="docutils literal"><span class="pre">auto_id</span></tt> is <tt class="xref docutils literal"><span class="pre">True</span></tt>.</p>
<p>By default, <tt class="docutils literal"><span class="pre">auto_id</span></tt> is set to the string <tt class="docutils literal"><span class="pre">'id_%s'</span></tt>.</p>
<p>Normally, a colon (<tt class="docutils literal"><span class="pre">:</span></tt>) will be appended after any label name when a form is
rendered. It's possible to change the colon to another character, or omit it
entirely, using the <tt class="docutils literal"><span class="pre">label_suffix</span></tt> parameter:</p>
<div class="highlight-python"><div class="highlight"><pre><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="s">&#39;id_for_</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">label_suffix</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="o">.</span><span class="n">as_ul</span><span class="p">()</span>
<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>
<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>
<span class="go">&lt;li&gt;&lt;label for=&quot;id_for_sender&quot;&gt;Sender&lt;/label&gt; &lt;input type=&quot;text&quot; name=&quot;sender&quot; id=&quot;id_for_sender&quot; /&gt;&lt;/li&gt;</span>
<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>
<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="s">&#39;id_for_</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">label_suffix</span><span class="o">=</span><span class="s">&#39; -&gt;&#39;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="o">.</span><span class="n">as_ul</span><span class="p">()</span>
<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>
<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>
<span class="go">&lt;li&gt;&lt;label for=&quot;id_for_sender&quot;&gt;Sender -&gt;&lt;/label&gt; &lt;input type=&quot;text&quot; name=&quot;sender&quot; id=&quot;id_for_sender&quot; /&gt;&lt;/li&gt;</span>
<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>
</pre></div>
</div>
<p>Note that the label suffix is added only if the last character of the
label isn't a punctuation character (<tt class="docutils literal"><span class="pre">.</span></tt>, <tt class="docutils literal"><span class="pre">!</span></tt>, <tt class="docutils literal"><span class="pre">?</span></tt> or <tt class="docutils literal"><span class="pre">:</span></tt>)</p>
</div>
<div class="section" id="s-notes-on-field-ordering">
<span id="notes-on-field-ordering"></span><h3>Notes on field ordering<a class="headerlink" href="#notes-on-field-ordering" title="Permalink to this headline">¶</a></h3>
<p>In the <tt class="docutils literal"><span class="pre">as_p()</span></tt>, <tt class="docutils literal"><span class="pre">as_ul()</span></tt> and <tt class="docutils literal"><span class="pre">as_table()</span></tt> shortcuts, the fields are
displayed in the order in which you define them in your form class. For
example, in the <tt class="docutils literal"><span class="pre">ContactForm</span></tt> example, the fields are defined in the order
<tt class="docutils literal"><span class="pre">subject</span></tt>, <tt class="docutils literal"><span class="pre">message</span></tt>, <tt class="docutils literal"><span class="pre">sender</span></tt>, <tt class="docutils literal"><span class="pre">cc_myself</span></tt>. To reorder the HTML
output, just change the order in which those fields are listed in the class.</p>
</div>
<div class="section" id="s-how-errors-are-displayed">
<span id="how-errors-are-displayed"></span><h3>How errors are displayed<a class="headerlink" href="#how-errors-are-displayed" title="Permalink to this headline">¶</a></h3>
<p>If you render a bound <tt class="docutils literal"><span class="pre">Form</span></tt> object, the act of rendering will automatically
run the form's validation if it hasn't already happened, and the HTML output
will include the validation errors as a <tt class="docutils literal"><span class="pre">&lt;ul</span> <span class="pre">class=&quot;errorlist&quot;&gt;</span></tt> near the
field. The particular positioning of the error messages depends on the output
method you're using:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;subject&#39;</span><span class="p">:</span> <span class="s">&#39;&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;message&#39;</span><span class="p">:</span> <span class="s">&#39;Hi there&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;sender&#39;</span><span class="p">:</span> <span class="s">&#39;invalid e-mail address&#39;</span><span class="p">,</span>
<span class="gp">... </span>        <span class="s">&#39;cc_myself&#39;</span><span class="p">:</span> <span class="bp">True</span><span class="p">}</span>
<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="bp">False</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="o">.</span><span class="n">as_table</span><span class="p">()</span>
<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>
<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>
<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 e-mail address.&lt;/li&gt;&lt;/ul&gt;&lt;input type=&quot;text&quot; name=&quot;sender&quot; value=&quot;invalid e-mail address&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;</span>
<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>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="o">.</span><span class="n">as_ul</span><span class="p">()</span>
<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>
<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>
<span class="go">&lt;li&gt;&lt;ul class=&quot;errorlist&quot;&gt;&lt;li&gt;Enter a valid e-mail address.&lt;/li&gt;&lt;/ul&gt;Sender: &lt;input type=&quot;text&quot; name=&quot;sender&quot; value=&quot;invalid e-mail address&quot; /&gt;&lt;/li&gt;</span>
<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>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="o">.</span><span class="n">as_p</span><span class="p">()</span>
<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>
<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>
<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>
<span class="go">&lt;p&gt;&lt;ul class=&quot;errorlist&quot;&gt;&lt;li&gt;Enter a valid e-mail address.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</span>
<span class="go">&lt;p&gt;Sender: &lt;input type=&quot;text&quot; name=&quot;sender&quot; value=&quot;invalid e-mail address&quot; /&gt;&lt;/p&gt;</span>
<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>
</pre></div>
</div>
</div>
<div class="section" id="s-customizing-the-error-list-format">
<span id="customizing-the-error-list-format"></span><h3>Customizing the error list format<a class="headerlink" href="#customizing-the-error-list-format" title="Permalink to this headline">¶</a></h3>
<p>By default, forms use <tt class="docutils literal"><span class="pre">django.forms.util.ErrorList</span></tt> to format validation
errors. If you'd like to use an alternate class for displaying errors, you can
pass that in at construction time:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">django.forms.util</span> <span class="kn">import</span> <span class="n">ErrorList</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">DivErrorList</span><span class="p">(</span><span class="n">ErrorList</span><span class="p">):</span>
<span class="gp">... </span>    <span class="k">def</span> <span class="nf">__unicode__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<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>
<span class="gp">... </span>    <span class="k">def</span> <span class="nf">as_divs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<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="s">u&#39;&#39;</span>
<span class="gp">... </span>        <span class="k">return</span> <span class="s">u&#39;&lt;div class=&quot;errorlist&quot;&gt;</span><span class="si">%s</span><span class="s">&lt;/div&gt;&#39;</span> <span class="o">%</span> <span class="s">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s">u&#39;&lt;div class=&quot;error&quot;&gt;</span><span class="si">%s</span><span class="s">&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>
<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="bp">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>
<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>
<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>
<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>
<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>
<span class="go">&lt;div class=&quot;errorlist&quot;&gt;&lt;div class=&quot;error&quot;&gt;Enter a valid e-mail address.&lt;/div&gt;&lt;/div&gt;</span>
<span class="go">&lt;p&gt;Sender: &lt;input type=&quot;text&quot; name=&quot;sender&quot; value=&quot;invalid e-mail address&quot; /&gt;&lt;/p&gt;</span>
<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>
</pre></div>
</div>
</div>
<div class="section" id="s-more-granular-output">
<span id="more-granular-output"></span><h3>More granular output<a class="headerlink" href="#more-granular-output" title="Permalink to this headline">¶</a></h3>
<p>The <tt class="docutils literal"><span class="pre">as_p()</span></tt>, <tt class="docutils literal"><span class="pre">as_ul()</span></tt> and <tt class="docutils literal"><span class="pre">as_table()</span></tt> methods are simply shortcuts for
lazy developers -- they're not the only way a form object can be displayed.</p>
<p>To display the HTML for a single field in your form, use dictionary lookup
syntax using the field's name as the key, and print the resulting object:</p>
<div class="highlight-python"><div class="highlight"><pre><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="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="p">[</span><span class="s">&#39;subject&#39;</span><span class="p">]</span>
<span class="go">&lt;input id=&quot;id_subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="p">[</span><span class="s">&#39;message&#39;</span><span class="p">]</span>
<span class="go">&lt;input type=&quot;text&quot; name=&quot;message&quot; id=&quot;id_message&quot; /&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="p">[</span><span class="s">&#39;sender&#39;</span><span class="p">]</span>
<span class="go">&lt;input type=&quot;text&quot; name=&quot;sender&quot; id=&quot;id_sender&quot; /&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="p">[</span><span class="s">&#39;cc_myself&#39;</span><span class="p">]</span>
<span class="go">&lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; id=&quot;id_cc_myself&quot; /&gt;</span>
</pre></div>
</div>
<p>Call <tt class="docutils literal"><span class="pre">str()</span></tt> or <tt class="docutils literal"><span class="pre">unicode()</span></tt> on the field to get its rendered HTML as a
string or Unicode object, respectively:</p>
<div class="highlight-python"><div class="highlight"><pre><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="s">&#39;subject&#39;</span><span class="p">])</span>
<span class="go">&#39;&lt;input id=&quot;id_subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">unicode</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="s">&#39;subject&#39;</span><span class="p">])</span>
<span class="go">u&#39;&lt;input id=&quot;id_subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;&#39;</span>
</pre></div>
</div>
<p>Form objects define a custom <tt class="docutils literal"><span class="pre">__iter__()</span></tt> method, which allows you to loop
through their fields:</p>
<div class="highlight-python"><div class="highlight"><pre><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="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">f</span><span class="p">:</span> <span class="k">print</span> <span class="n">field</span>
<span class="go">&lt;input id=&quot;id_subject&quot; type=&quot;text&quot; name=&quot;subject&quot; maxlength=&quot;100&quot; /&gt;</span>
<span class="go">&lt;input type=&quot;text&quot; name=&quot;message&quot; id=&quot;id_message&quot; /&gt;</span>
<span class="go">&lt;input type=&quot;text&quot; name=&quot;sender&quot; id=&quot;id_sender&quot; /&gt;</span>
<span class="go">&lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; id=&quot;id_cc_myself&quot; /&gt;</span>
</pre></div>
</div>
<p>The field-specific output honors the form object's <tt class="docutils literal"><span class="pre">auto_id</span></tt> setting:</p>
<div class="highlight-python"><div class="highlight"><pre><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="bp">False</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="p">[</span><span class="s">&#39;message&#39;</span><span class="p">]</span>
<span class="go">&lt;input type=&quot;text&quot; name=&quot;message&quot; /&gt;</span>
<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="s">&#39;id_</span><span class="si">%s</span><span class="s">&#39;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="p">[</span><span class="s">&#39;message&#39;</span><span class="p">]</span>
<span class="go">&lt;input type=&quot;text&quot; name=&quot;message&quot; id=&quot;id_message&quot; /&gt;</span>
</pre></div>
</div>
<p>For a field's list of errors, access the field's <tt class="docutils literal"><span class="pre">errors</span></tt> attribute. This
is a list-like object that is displayed as an HTML <tt class="docutils literal"><span class="pre">&lt;ul</span> <span class="pre">class=&quot;errorlist&quot;&gt;</span></tt>
when printed:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;subject&#39;</span><span class="p">:</span> <span class="s">&#39;hi&#39;</span><span class="p">,</span> <span class="s">&#39;message&#39;</span><span class="p">:</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="s">&#39;sender&#39;</span><span class="p">:</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="s">&#39;cc_myself&#39;</span><span class="p">:</span> <span class="s">&#39;&#39;</span><span class="p">}</span>
<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="bp">False</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="p">[</span><span class="s">&#39;message&#39;</span><span class="p">]</span>
<span class="go">&lt;input type=&quot;text&quot; name=&quot;message&quot; /&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="p">[</span><span class="s">&#39;message&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">errors</span>
<span class="go">[u&#39;This field is required.&#39;]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="p">[</span><span class="s">&#39;message&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">errors</span>
<span class="go">&lt;ul class=&quot;errorlist&quot;&gt;&lt;li&gt;This field is required.&lt;/li&gt;&lt;/ul&gt;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="p">[</span><span class="s">&#39;subject&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">errors</span>
<span class="go">[]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="p">[</span><span class="s">&#39;subject&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">errors</span>

<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="s">&#39;subject&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">errors</span><span class="p">)</span>
<span class="go">&#39;&#39;</span>
</pre></div>
</div>
</div>
</div>
<div class="section" id="s-binding-uploaded-files-to-a-form">
<span id="s-binding-uploaded-files"></span><span id="binding-uploaded-files-to-a-form"></span><span id="binding-uploaded-files"></span><h2>Binding uploaded files to a form<a class="headerlink" href="#binding-uploaded-files-to-a-form" title="Permalink to this headline">¶</a></h2>
<div class="versionadded">
<span class="title">New in Django 1.0:</span> <a class="reference external" href="../../releases/1.0.html#releases-1-0"><em>Please, see the release notes</em></a></div>
<p>Dealing with forms that have <tt class="docutils literal"><span class="pre">FileField</span></tt> and <tt class="docutils literal"><span class="pre">ImageField</span></tt> fields
is a little more complicated than a normal form.</p>
<p>Firstly, in order to upload files, you'll need to make sure that your
<tt class="docutils literal"><span class="pre">&lt;form&gt;</span></tt> element correctly defines the <tt class="docutils literal"><span class="pre">enctype</span></tt> as
<tt class="docutils literal"><span class="pre">&quot;multipart/form-data&quot;</span></tt>:</p>
<div class="highlight-python"><pre>&lt;form enctype="multipart/form-data" method="post" action="/foo/"&gt;</pre>
</div>
<p>Secondly, when you use the form, you need to bind the file data. File
data is handled separately to normal form data, so when your form
contains a <tt class="docutils literal"><span class="pre">FileField</span></tt> and <tt class="docutils literal"><span class="pre">ImageField</span></tt>, you will need to specify
a second argument when you bind your form. So if we extend our
ContactForm to include an <tt class="docutils literal"><span class="pre">ImageField</span></tt> called <tt class="docutils literal"><span class="pre">mugshot</span></tt>, we
need to bind the file data containing the mugshot image:</p>
<div class="highlight-python"><pre># Bound form with an image field
&gt;&gt;&gt; from django.core.files.uploadedfile import SimpleUploadedFile
&gt;&gt;&gt; data = {'subject': 'hello',
...         'message': 'Hi there',
...         'sender': 'foo@example.com',
...         'cc_myself': True}
&gt;&gt;&gt; file_data = {'mugshot': SimpleUploadedFile('face.jpg', &lt;file data&gt;)}
&gt;&gt;&gt; f = ContactFormWithMugshot(data, file_data)</pre>
</div>
<p>In practice, you will usually specify <tt class="docutils literal"><span class="pre">request.FILES</span></tt> as the source
of file data (just like you use <tt class="docutils literal"><span class="pre">request.POST</span></tt> as the source of
form data):</p>
<div class="highlight-python"><pre># Bound form with an image field, data from the request
&gt;&gt;&gt; f = ContactFormWithMugshot(request.POST, request.FILES)</pre>
</div>
<p>Constructing an unbound form is the same as always -- just omit both
form data <em>and</em> file data:</p>
<div class="highlight-python"><pre># Unbound form with a image field
&gt;&gt;&gt; f = ContactFormWithMugshot()</pre>
</div>
<div class="section" id="s-testing-for-multipart-forms">
<span id="testing-for-multipart-forms"></span><h3>Testing for multipart forms<a class="headerlink" href="#testing-for-multipart-forms" title="Permalink to this headline">¶</a></h3>
<p>If you're writing reusable views or templates, you may not know ahead of time
whether your form is a multipart form or not. The <tt class="docutils literal"><span class="pre">is_multipart()</span></tt> method
tells you whether the form requires multipart encoding for submission:</p>
<div class="highlight-python"><div class="highlight"><pre><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>
<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>
<span class="go">True</span>
</pre></div>
</div>
<p>Here's an example of how you might use this in a template:</p>
<div class="highlight-python"><pre>{% if form.is_multipart %}
    &lt;form enctype="multipart/form-data" method="post" action="/foo/"&gt;
{% else %}
    &lt;form method="post" action="/foo/"&gt;
{% endif %}
{{ form }}
&lt;/form&gt;</pre>
</div>
</div>
</div>
<div class="section" id="s-subclassing-forms">
<span id="subclassing-forms"></span><h2>Subclassing forms<a class="headerlink" href="#subclassing-forms" title="Permalink to this headline">¶</a></h2>
<p>If you have multiple <tt class="docutils literal"><span class="pre">Form</span></tt> classes that share fields, you can use
subclassing to remove redundancy.</p>
<p>When you subclass a custom <tt class="docutils literal"><span class="pre">Form</span></tt> class, the resulting subclass will
include all fields of the parent class(es), followed by the fields you define
in the subclass.</p>
<p>In this example, <tt class="docutils literal"><span class="pre">ContactFormWithPriority</span></tt> contains all the fields from
<tt class="docutils literal"><span class="pre">ContactForm</span></tt>, plus an additional field, <tt class="docutils literal"><span class="pre">priority</span></tt>. The <tt class="docutils literal"><span class="pre">ContactForm</span></tt>
fields are ordered first:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">ContactFormWithPriority</span><span class="p">(</span><span class="n">ContactForm</span><span class="p">):</span>
<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>
<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="bp">False</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">f</span><span class="o">.</span><span class="n">as_ul</span><span class="p">()</span>
<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>
<span class="go">&lt;li&gt;Message: &lt;input type=&quot;text&quot; name=&quot;message&quot; /&gt;&lt;/li&gt;</span>
<span class="go">&lt;li&gt;Sender: &lt;input type=&quot;text&quot; name=&quot;sender&quot; /&gt;&lt;/li&gt;</span>
<span class="go">&lt;li&gt;Cc myself: &lt;input type=&quot;checkbox&quot; name=&quot;cc_myself&quot; /&gt;&lt;/li&gt;</span>
<span class="go">&lt;li&gt;Priority: &lt;input type=&quot;text&quot; name=&quot;priority&quot; /&gt;&lt;/li&gt;</span>
</pre></div>
</div>
<p>It's possible to subclass multiple forms, treating forms as &quot;mix-ins.&quot; In this
example, <tt class="docutils literal"><span class="pre">BeatleForm</span></tt> subclasses both <tt class="docutils literal"><span class="pre">PersonForm</span></tt> and <tt class="docutils literal"><span class="pre">InstrumentForm</span></tt>
(in that order), and its field list includes the fields from the parent
classes:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">PersonForm</span><span class="p">(</span><span class="n">Form</span><span class="p">):</span>
<span class="gp">... </span>    <span class="n">first_name</span> <span class="o">=</span> <span class="n">CharField</span><span class="p">()</span>
<span class="gp">... </span>    <span class="n">last_name</span> <span class="o">=</span> <span class="n">CharField</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">InstrumentForm</span><span class="p">(</span><span class="n">Form</span><span class="p">):</span>
<span class="gp">... </span>    <span class="n">instrument</span> <span class="o">=</span> <span class="n">CharField</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">class</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>
<span class="gp">... </span>    <span class="n">haircut_type</span> <span class="o">=</span> <span class="n">CharField</span><span class="p">()</span>
<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="bp">False</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">b</span><span class="o">.</span><span class="n">as_ul</span><span class="p">()</span>
<span class="go">&lt;li&gt;First name: &lt;input type=&quot;text&quot; name=&quot;first_name&quot; /&gt;&lt;/li&gt;</span>
<span class="go">&lt;li&gt;Last name: &lt;input type=&quot;text&quot; name=&quot;last_name&quot; /&gt;&lt;/li&gt;</span>
<span class="go">&lt;li&gt;Instrument: &lt;input type=&quot;text&quot; name=&quot;instrument&quot; /&gt;&lt;/li&gt;</span>
<span class="go">&lt;li&gt;Haircut type: &lt;input type=&quot;text&quot; name=&quot;haircut_type&quot; /&gt;&lt;/li&gt;</span>
</pre></div>
</div>
</div>
<div class="section" id="s-prefixes-for-forms">
<span id="s-form-prefix"></span><span id="prefixes-for-forms"></span><span id="form-prefix"></span><h2>Prefixes for forms<a class="headerlink" href="#prefixes-for-forms" title="Permalink to this headline">¶</a></h2>
<dl class="attribute">
<dt id="django.forms.Form.prefix">
<tt class="descclassname">Form.</tt><tt class="descname">prefix</tt><a class="headerlink" href="#django.forms.Form.prefix" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>

<p>You can put several Django forms inside one <tt class="docutils literal"><span class="pre">&lt;form&gt;</span></tt> tag. To give each
<tt class="docutils literal"><span class="pre">Form</span></tt> its own namespace, use the <tt class="docutils literal"><span class="pre">prefix</span></tt> keyword argument:</p>
<div class="highlight-python"><div class="highlight"><pre><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="s">&quot;mother&quot;</span><span class="p">)</span>
<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="s">&quot;father&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">mother</span><span class="o">.</span><span class="n">as_ul</span><span class="p">()</span>
<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>
<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>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">father</span><span class="o">.</span><span class="n">as_ul</span><span class="p">()</span>
<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>
<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>
</pre></div>
</div>
</div>
</div>


          </div>         
        </div>
      </div>
      
        
          <div class="yui-b" id="sidebar">
            
      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper">
            <h3><a href="../../contents.html">Table Of Contents</a></h3>
            <ul>
<li><a class="reference external" href="#">The Forms API</a><ul>
<li><a class="reference external" href="#bound-and-unbound-forms">Bound and unbound forms</a></li>
<li><a class="reference external" href="#using-forms-to-validate-data">Using forms to validate data</a><ul>
<li><a class="reference external" href="#behavior-of-unbound-forms">Behavior of unbound forms</a></li>
</ul>
</li>
<li><a class="reference external" href="#dynamic-initial-values">Dynamic initial values</a></li>
<li><a class="reference external" href="#accessing-clean-data">Accessing &#8220;clean&#8221; data</a></li>
<li><a class="reference external" href="#outputting-forms-as-html">Outputting forms as HTML</a><ul>
<li><a class="reference external" href="#as-p"><tt class="docutils literal"><span class="pre">as_p()</span></tt></a></li>
<li><a class="reference external" href="#as-ul"><tt class="docutils literal"><span class="pre">as_ul()</span></tt></a></li>
<li><a class="reference external" href="#as-table"><tt class="docutils literal"><span class="pre">as_table()</span></tt></a></li>
<li><a class="reference external" href="#configuring-html-label-tags">Configuring HTML <tt class="docutils literal"><span class="pre">&lt;label&gt;</span></tt> tags</a></li>
<li><a class="reference external" href="#notes-on-field-ordering">Notes on field ordering</a></li>
<li><a class="reference external" href="#how-errors-are-displayed">How errors are displayed</a></li>
<li><a class="reference external" href="#customizing-the-error-list-format">Customizing the error list format</a></li>
<li><a class="reference external" href="#more-granular-output">More granular output</a></li>
</ul>
</li>
<li><a class="reference external" href="#binding-uploaded-files-to-a-form">Binding uploaded files to a form</a><ul>
<li><a class="reference external" href="#testing-for-multipart-forms">Testing for multipart forms</a></li>
</ul>
</li>
<li><a class="reference external" href="#subclassing-forms">Subclassing forms</a></li>
<li><a class="reference external" href="#prefixes-for-forms">Prefixes for forms</a></li>
</ul>
</li>
</ul>

  <h3>Browse</h3>
  <ul>
    
      <li>Prev: <a href="index.html">Forms</a></li>
    
    
      <li>Next: <a href="fields.html">Form fields</a></li>
    
  </ul>
  <h3>You are here:</h3>
  <ul>
      <li>
        <a href="../../index.html">Django v1.1 documentation</a>
        
          <ul><li><a href="../index.html">API Reference</a>
        
          <ul><li><a href="index.html">Forms</a>
        
        <ul><li>The Forms API</li></ul>
        </li></ul></li></ul>
      </li>
  </ul>  

            <h3>This Page</h3>
            <ul class="this-page-menu">
              <li><a href="../../_sources/ref/forms/api.txt"
                     rel="nofollow">Show Source</a></li>
            </ul>
          <div id="searchbox" style="display: none">
            <h3>Quick search</h3>
              <form class="search" action="../../search.html" method="get">
                <input type="text" name="q" size="18" />
                <input type="submit" value="Go" />
                <input type="hidden" name="check_keywords" value="yes" />
                <input type="hidden" name="area" value="default" />
              </form>
              <p class="searchtip" style="font-size: 90%">
              Enter search terms or a module, class or function name.
              </p>
          </div>
          <script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>
              <h3>Last update:</h3>
              <p class="topless">Feb 18, 2011</p>
          </div> 
        
      
    </div>
    
    <div id="ft">
      <div class="nav">
    &laquo; <a href="index.html" title="Forms">previous</a> 
     |
    <a href="../index.html" title="API Reference" accesskey="U">up</a>
   |
    <a href="fields.html" title="Form fields">next</a> &raquo;</div>
    </div>
  </div>

      <div class="clearer"></div>
    </div>
  </body>
</html>