<!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" lang=""> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>django.forms.fields — Django 1.8.19 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.8.19', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="../../../_static/jquery.js"></script> <script type="text/javascript" src="../../../_static/underscore.js"></script> <script type="text/javascript" src="../../../_static/doctools.js"></script> <link rel="index" title="Index" href="../../../genindex.html" /> <link rel="search" title="Search" href="../../../search.html" /> <link rel="top" title="Django 1.8.19 documentation" href="../../../contents.html" /> <link rel="up" title="django" href="../../django.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 = "../../../ref/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 role="document"> <div class="document"> <div id="custom-doc" class="yui-t6"> <div id="hd"> <h1><a href="../../../index.html">Django 1.8.19 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="../../../py-modindex.html">Modules</a> </div> <div class="nav"> <a href="../../index.html" title="Module code" accesskey="U">up</a></div> </div> <div id="bd"> <div id="yui-main"> <div class="yui-b"> <div class="yui-g" id="_modules-django-forms-fields"> <h1>Source code for django.forms.fields</h1><div class="highlight"><pre> <span></span><span class="sd">"""</span> <span class="sd">Field classes.</span> <span class="sd">"""</span> <span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">unicode_literals</span> <span class="kn">import</span> <span class="nn">copy</span> <span class="kn">import</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="nn">os</span> <span class="kn">import</span> <span class="nn">re</span> <span class="kn">import</span> <span class="nn">sys</span> <span class="kn">import</span> <span class="nn">uuid</span> <span class="kn">import</span> <span class="nn">warnings</span> <span class="kn">from</span> <span class="nn">decimal</span> <span class="k">import</span> <span class="n">Decimal</span><span class="p">,</span> <span class="n">DecimalException</span> <span class="kn">from</span> <span class="nn">io</span> <span class="k">import</span> <span class="n">BytesIO</span> <span class="kn">from</span> <span class="nn">django.core</span> <span class="k">import</span> <span class="n">validators</span> <span class="kn">from</span> <span class="nn">django.core.exceptions</span> <span class="k">import</span> <span class="n">ValidationError</span> <span class="c1"># Provide this import for backwards compatibility.</span> <span class="kn">from</span> <span class="nn">django.core.validators</span> <span class="k">import</span> <span class="n">EMPTY_VALUES</span> <span class="c1"># NOQA</span> <span class="kn">from</span> <span class="nn">django.forms.utils</span> <span class="k">import</span> <span class="n">from_current_timezone</span><span class="p">,</span> <span class="n">to_current_timezone</span> <span class="kn">from</span> <span class="nn">django.forms.widgets</span> <span class="k">import</span> <span class="p">(</span> <span class="n">FILE_INPUT_CONTRADICTION</span><span class="p">,</span> <span class="n">CheckboxInput</span><span class="p">,</span> <span class="n">ClearableFileInput</span><span class="p">,</span> <span class="n">DateInput</span><span class="p">,</span> <span class="n">DateTimeInput</span><span class="p">,</span> <span class="n">EmailInput</span><span class="p">,</span> <span class="n">HiddenInput</span><span class="p">,</span> <span class="n">MultipleHiddenInput</span><span class="p">,</span> <span class="n">NullBooleanSelect</span><span class="p">,</span> <span class="n">NumberInput</span><span class="p">,</span> <span class="n">Select</span><span class="p">,</span> <span class="n">SelectMultiple</span><span class="p">,</span> <span class="n">SplitDateTimeWidget</span><span class="p">,</span> <span class="n">SplitHiddenDateTimeWidget</span><span class="p">,</span> <span class="n">TextInput</span><span class="p">,</span> <span class="n">TimeInput</span><span class="p">,</span> <span class="n">URLInput</span><span class="p">,</span> <span class="p">)</span> <span class="kn">from</span> <span class="nn">django.utils</span> <span class="k">import</span> <span class="n">formats</span><span class="p">,</span> <span class="n">six</span> <span class="kn">from</span> <span class="nn">django.utils.dateparse</span> <span class="k">import</span> <span class="n">parse_duration</span> <span class="kn">from</span> <span class="nn">django.utils.deprecation</span> <span class="k">import</span> <span class="p">(</span> <span class="n">RemovedInDjango19Warning</span><span class="p">,</span> <span class="n">RemovedInDjango110Warning</span><span class="p">,</span> <span class="n">RenameMethodsBase</span><span class="p">,</span> <span class="p">)</span> <span class="kn">from</span> <span class="nn">django.utils.duration</span> <span class="k">import</span> <span class="n">duration_string</span> <span class="kn">from</span> <span class="nn">django.utils.encoding</span> <span class="k">import</span> <span class="n">force_str</span><span class="p">,</span> <span class="n">force_text</span><span class="p">,</span> <span class="n">smart_text</span> <span class="kn">from</span> <span class="nn">django.utils.ipv6</span> <span class="k">import</span> <span class="n">clean_ipv6_address</span> <span class="kn">from</span> <span class="nn">django.utils.six.moves.urllib.parse</span> <span class="k">import</span> <span class="n">urlsplit</span><span class="p">,</span> <span class="n">urlunsplit</span> <span class="kn">from</span> <span class="nn">django.utils.translation</span> <span class="k">import</span> <span class="n">ugettext_lazy</span> <span class="k">as</span> <span class="n">_</span><span class="p">,</span> <span class="n">ungettext_lazy</span> <span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span> <span class="s1">'Field'</span><span class="p">,</span> <span class="s1">'CharField'</span><span class="p">,</span> <span class="s1">'IntegerField'</span><span class="p">,</span> <span class="s1">'DateField'</span><span class="p">,</span> <span class="s1">'TimeField'</span><span class="p">,</span> <span class="s1">'DateTimeField'</span><span class="p">,</span> <span class="s1">'DurationField'</span><span class="p">,</span> <span class="s1">'RegexField'</span><span class="p">,</span> <span class="s1">'EmailField'</span><span class="p">,</span> <span class="s1">'FileField'</span><span class="p">,</span> <span class="s1">'ImageField'</span><span class="p">,</span> <span class="s1">'URLField'</span><span class="p">,</span> <span class="s1">'BooleanField'</span><span class="p">,</span> <span class="s1">'NullBooleanField'</span><span class="p">,</span> <span class="s1">'ChoiceField'</span><span class="p">,</span> <span class="s1">'MultipleChoiceField'</span><span class="p">,</span> <span class="s1">'ComboField'</span><span class="p">,</span> <span class="s1">'MultiValueField'</span><span class="p">,</span> <span class="s1">'FloatField'</span><span class="p">,</span> <span class="s1">'DecimalField'</span><span class="p">,</span> <span class="s1">'SplitDateTimeField'</span><span class="p">,</span> <span class="s1">'IPAddressField'</span><span class="p">,</span> <span class="s1">'GenericIPAddressField'</span><span class="p">,</span> <span class="s1">'FilePathField'</span><span class="p">,</span> <span class="s1">'SlugField'</span><span class="p">,</span> <span class="s1">'TypedChoiceField'</span><span class="p">,</span> <span class="s1">'TypedMultipleChoiceField'</span><span class="p">,</span> <span class="s1">'UUIDField'</span><span class="p">,</span> <span class="p">)</span> <span class="k">class</span> <span class="nc">RenameFieldMethods</span><span class="p">(</span><span class="n">RenameMethodsBase</span><span class="p">):</span> <span class="n">renamed_methods</span> <span class="o">=</span> <span class="p">(</span> <span class="p">(</span><span class="s1">'_has_changed'</span><span class="p">,</span> <span class="s1">'has_changed'</span><span class="p">,</span> <span class="n">RemovedInDjango110Warning</span><span class="p">),</span> <span class="p">)</span> <div class="viewcode-block" id="Field"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.Field">[docs]</a><span class="k">class</span> <span class="nc">Field</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">RenameFieldMethods</span><span class="p">,</span> <span class="nb">object</span><span class="p">)):</span> <span class="n">widget</span> <span class="o">=</span> <span class="n">TextInput</span> <span class="c1"># Default widget to use when rendering this type of Field.</span> <span class="n">hidden_widget</span> <span class="o">=</span> <span class="n">HiddenInput</span> <span class="c1"># Default widget to use when rendering this as "hidden".</span> <span class="n">default_validators</span> <span class="o">=</span> <span class="p">[]</span> <span class="c1"># Default set of validators</span> <span class="c1"># Add an 'invalid' entry to default_error_message if you want a specific</span> <span class="c1"># field error message not raised by the field validators.</span> <span class="n">default_error_messages</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'required'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s1">'This field is required.'</span><span class="p">),</span> <span class="p">}</span> <span class="n">empty_values</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">validators</span><span class="o">.</span><span class="n">EMPTY_VALUES</span><span class="p">)</span> <span class="c1"># Tracks each time a Field instance is created. Used to retain order.</span> <span class="n">creation_counter</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">widget</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">initial</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">help_text</span><span class="o">=</span><span class="s1">''</span><span class="p">,</span> <span class="n">error_messages</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">show_hidden_initial</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">validators</span><span class="o">=</span><span class="p">[],</span> <span class="n">localize</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">label_suffix</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> <span class="c1"># required -- Boolean that specifies whether the field is required.</span> <span class="c1"># True by default.</span> <span class="c1"># widget -- A Widget class, or instance of a Widget class, that should</span> <span class="c1"># be used for this Field when displaying it. Each Field has a</span> <span class="c1"># default Widget that it'll use if you don't specify this. In</span> <span class="c1"># most cases, the default widget is TextInput.</span> <span class="c1"># label -- A verbose name for this field, for use in displaying this</span> <span class="c1"># field in a form. By default, Django will use a "pretty"</span> <span class="c1"># version of the form field name, if the Field is part of a</span> <span class="c1"># Form.</span> <span class="c1"># initial -- A value to use in this Field's initial display. This value</span> <span class="c1"># is *not* used as a fallback if data isn't given.</span> <span class="c1"># help_text -- An optional string to use as "help text" for this Field.</span> <span class="c1"># error_messages -- An optional dictionary to override the default</span> <span class="c1"># messages that the field will raise.</span> <span class="c1"># show_hidden_initial -- Boolean that specifies if it is needed to render a</span> <span class="c1"># hidden widget with initial value after widget.</span> <span class="c1"># validators -- List of additional validators to use</span> <span class="c1"># localize -- Boolean that specifies if the field should be localized.</span> <span class="c1"># label_suffix -- Suffix to be added to the label. Overrides</span> <span class="c1"># form's label_suffix.</span> <span class="bp">self</span><span class="o">.</span><span class="n">required</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">initial</span> <span class="o">=</span> <span class="n">required</span><span class="p">,</span> <span class="n">label</span><span class="p">,</span> <span class="n">initial</span> <span class="bp">self</span><span class="o">.</span><span class="n">show_hidden_initial</span> <span class="o">=</span> <span class="n">show_hidden_initial</span> <span class="bp">self</span><span class="o">.</span><span class="n">help_text</span> <span class="o">=</span> <span class="n">help_text</span> <span class="bp">self</span><span class="o">.</span><span class="n">label_suffix</span> <span class="o">=</span> <span class="n">label_suffix</span> <span class="n">widget</span> <span class="o">=</span> <span class="n">widget</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">widget</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">widget</span><span class="p">,</span> <span class="nb">type</span><span class="p">):</span> <span class="n">widget</span> <span class="o">=</span> <span class="n">widget</span><span class="p">()</span> <span class="c1"># Trigger the localization machinery if needed.</span> <span class="bp">self</span><span class="o">.</span><span class="n">localize</span> <span class="o">=</span> <span class="n">localize</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">localize</span><span class="p">:</span> <span class="n">widget</span><span class="o">.</span><span class="n">is_localized</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># Let the widget know whether it should display as required.</span> <span class="n">widget</span><span class="o">.</span><span class="n">is_required</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">required</span> <span class="c1"># Hook into self.widget_attrs() for any Field-specific HTML attributes.</span> <span class="n">extra_attrs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">widget_attrs</span><span class="p">(</span><span class="n">widget</span><span class="p">)</span> <span class="k">if</span> <span class="n">extra_attrs</span><span class="p">:</span> <span class="n">widget</span><span class="o">.</span><span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">extra_attrs</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">widget</span> <span class="o">=</span> <span class="n">widget</span> <span class="c1"># Increase the creation counter, and save our local copy.</span> <span class="bp">self</span><span class="o">.</span><span class="n">creation_counter</span> <span class="o">=</span> <span class="n">Field</span><span class="o">.</span><span class="n">creation_counter</span> <span class="n">Field</span><span class="o">.</span><span class="n">creation_counter</span> <span class="o">+=</span> <span class="mi">1</span> <span class="n">messages</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__mro__</span><span class="p">):</span> <span class="n">messages</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="s1">'default_error_messages'</span><span class="p">,</span> <span class="p">{}))</span> <span class="n">messages</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">error_messages</span> <span class="ow">or</span> <span class="p">{})</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span> <span class="o">=</span> <span class="n">messages</span> <span class="bp">self</span><span class="o">.</span><span class="n">validators</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_validators</span> <span class="o">+</span> <span class="n">validators</span> <span class="nb">super</span><span class="p">(</span><span class="n">Field</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span> <span class="k">def</span> <span class="nf">prepare_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="k">return</span> <span class="n">value</span> <span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="k">return</span> <span class="n">value</span> <span class="k">def</span> <span class="nf">validate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">required</span><span class="p">:</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'required'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'required'</span><span class="p">)</span> <span class="k">def</span> <span class="nf">run_validators</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span> <span class="k">return</span> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">validators</span><span class="p">:</span> <span class="k">try</span><span class="p">:</span> <span class="n">v</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">except</span> <span class="n">ValidationError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s1">'code'</span><span class="p">)</span> <span class="ow">and</span> <span class="n">e</span><span class="o">.</span><span class="n">code</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">:</span> <span class="n">e</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="n">e</span><span class="o">.</span><span class="n">code</span><span class="p">]</span> <span class="n">errors</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">error_list</span><span class="p">)</span> <span class="k">if</span> <span class="n">errors</span><span class="p">:</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span> <div class="viewcode-block" id="Field.clean"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.Field.clean">[docs]</a> <span class="k">def</span> <span class="nf">clean</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Validates the given value and returns its "cleaned" value as an</span> <span class="sd"> appropriate Python object.</span> <span class="sd"> Raises ValidationError for any errors.</span> <span class="sd"> """</span> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_validators</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">return</span> <span class="n">value</span></div> <span class="k">def</span> <span class="nf">bound_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">initial</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Return the value that should be shown for this field on render of a</span> <span class="sd"> bound form, given the submitted POST data for the field and the initial</span> <span class="sd"> data, if any.</span> <span class="sd"> For most fields, this will simply be data; FileFields need to handle it</span> <span class="sd"> a bit differently.</span> <span class="sd"> """</span> <span class="k">return</span> <span class="n">data</span> <span class="k">def</span> <span class="nf">widget_attrs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">widget</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Given a Widget instance (*not* a Widget class), returns a dictionary of</span> <span class="sd"> any HTML attributes that should be added to the Widget, based on this</span> <span class="sd"> Field.</span> <span class="sd"> """</span> <span class="k">return</span> <span class="p">{}</span> <div class="viewcode-block" id="Field.has_changed"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.Field.has_changed">[docs]</a> <span class="k">def</span> <span class="nf">has_changed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">initial</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Return True if data differs from initial.</span> <span class="sd"> """</span> <span class="c1"># For purposes of seeing whether something has changed, None is</span> <span class="c1"># the same as an empty string, if the data or initial value we get</span> <span class="c1"># is None, replace it w/ ''.</span> <span class="n">initial_value</span> <span class="o">=</span> <span class="n">initial</span> <span class="k">if</span> <span class="n">initial</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="s1">''</span> <span class="k">try</span><span class="p">:</span> <span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">'_coerce'</span><span class="p">):</span> <span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_coerce</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="k">except</span> <span class="n">ValidationError</span><span class="p">:</span> <span class="k">return</span> <span class="kc">True</span> <span class="n">data_value</span> <span class="o">=</span> <span class="n">data</span> <span class="k">if</span> <span class="n">data</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="s1">''</span> <span class="k">return</span> <span class="n">initial_value</span> <span class="o">!=</span> <span class="n">data_value</span></div> <span class="k">def</span> <span class="nf">__deepcopy__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">memo</span><span class="p">):</span> <span class="n">result</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="n">memo</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="bp">self</span><span class="p">)]</span> <span class="o">=</span> <span class="n">result</span> <span class="n">result</span><span class="o">.</span><span class="n">widget</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">widget</span><span class="p">,</span> <span class="n">memo</span><span class="p">)</span> <span class="n">result</span><span class="o">.</span><span class="n">validators</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validators</span><span class="p">[:]</span> <span class="k">return</span> <span class="n">result</span></div> <div class="viewcode-block" id="CharField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.CharField">[docs]</a><span class="k">class</span> <span class="nc">CharField</span><span class="p">(</span><span class="n">Field</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">max_length</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">min_length</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_length</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">min_length</span> <span class="o">=</span> <span class="n">max_length</span><span class="p">,</span> <span class="n">min_length</span> <span class="nb">super</span><span class="p">(</span><span class="n">CharField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">if</span> <span class="n">min_length</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">validators</span><span class="o">.</span><span class="n">MinLengthValidator</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">min_length</span><span class="p">)))</span> <span class="k">if</span> <span class="n">max_length</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">validators</span><span class="o">.</span><span class="n">MaxLengthValidator</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">max_length</span><span class="p">)))</span> <span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="s2">"Returns a Unicode object."</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span> <span class="k">return</span> <span class="s1">''</span> <span class="k">return</span> <span class="n">smart_text</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">def</span> <span class="nf">widget_attrs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">widget</span><span class="p">):</span> <span class="n">attrs</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">CharField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">widget_attrs</span><span class="p">(</span><span class="n">widget</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_length</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="c1"># The HTML attribute is maxlength, not max_length.</span> <span class="n">attrs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">'maxlength'</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">max_length</span><span class="p">)})</span> <span class="k">return</span> <span class="n">attrs</span></div> <div class="viewcode-block" id="IntegerField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.IntegerField">[docs]</a><span class="k">class</span> <span class="nc">IntegerField</span><span class="p">(</span><span class="n">Field</span><span class="p">):</span> <span class="n">widget</span> <span class="o">=</span> <span class="n">NumberInput</span> <span class="n">default_error_messages</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'invalid'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s1">'Enter a whole number.'</span><span class="p">),</span> <span class="p">}</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">max_value</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">min_value</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">min_value</span> <span class="o">=</span> <span class="n">max_value</span><span class="p">,</span> <span class="n">min_value</span> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'localize'</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">widget</span> <span class="o">==</span> <span class="n">NumberInput</span><span class="p">:</span> <span class="c1"># Localized number input is not well supported on most browsers</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s1">'widget'</span><span class="p">,</span> <span class="nb">super</span><span class="p">(</span><span class="n">IntegerField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">widget</span><span class="p">)</span> <span class="nb">super</span><span class="p">(</span><span class="n">IntegerField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">if</span> <span class="n">max_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">validators</span><span class="o">.</span><span class="n">MaxValueValidator</span><span class="p">(</span><span class="n">max_value</span><span class="p">))</span> <span class="k">if</span> <span class="n">min_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">validators</span><span class="o">.</span><span class="n">MinValueValidator</span><span class="p">(</span><span class="n">min_value</span><span class="p">))</span> <span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Validates that int() can be called on the input. Returns the result</span> <span class="sd"> of int(). Returns None for empty values.</span> <span class="sd"> """</span> <span class="n">value</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">IntegerField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span> <span class="k">return</span> <span class="kc">None</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">localize</span><span class="p">:</span> <span class="n">value</span> <span class="o">=</span> <span class="n">formats</span><span class="o">.</span><span class="n">sanitize_separators</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">try</span><span class="p">:</span> <span class="n">value</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">))</span> <span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'invalid'</span><span class="p">)</span> <span class="k">return</span> <span class="n">value</span> <span class="k">def</span> <span class="nf">widget_attrs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">widget</span><span class="p">):</span> <span class="n">attrs</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">IntegerField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">widget_attrs</span><span class="p">(</span><span class="n">widget</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">widget</span><span class="p">,</span> <span class="n">NumberInput</span><span class="p">):</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">min_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="n">attrs</span><span class="p">[</span><span class="s1">'min'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">min_value</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="n">attrs</span><span class="p">[</span><span class="s1">'max'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_value</span> <span class="k">return</span> <span class="n">attrs</span></div> <div class="viewcode-block" id="FloatField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.FloatField">[docs]</a><span class="k">class</span> <span class="nc">FloatField</span><span class="p">(</span><span class="n">IntegerField</span><span class="p">):</span> <span class="n">default_error_messages</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'invalid'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s1">'Enter a number.'</span><span class="p">),</span> <span class="p">}</span> <span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Validates that float() can be called on the input. Returns the result</span> <span class="sd"> of float(). Returns None for empty values.</span> <span class="sd"> """</span> <span class="n">value</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">IntegerField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span> <span class="k">return</span> <span class="kc">None</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">localize</span><span class="p">:</span> <span class="n">value</span> <span class="o">=</span> <span class="n">formats</span><span class="o">.</span><span class="n">sanitize_separators</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">try</span><span class="p">:</span> <span class="n">value</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'invalid'</span><span class="p">)</span> <span class="k">return</span> <span class="n">value</span> <span class="k">def</span> <span class="nf">validate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="nb">super</span><span class="p">(</span><span class="n">FloatField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="c1"># Check for NaN (which is the only thing not equal to itself) and +/- infinity</span> <span class="k">if</span> <span class="n">value</span> <span class="o">!=</span> <span class="n">value</span> <span class="ow">or</span> <span class="n">value</span> <span class="ow">in</span> <span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'Inf'</span><span class="p">),</span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'-Inf'</span><span class="p">)):</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'invalid'</span><span class="p">)</span> <span class="k">return</span> <span class="n">value</span> <span class="k">def</span> <span class="nf">widget_attrs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">widget</span><span class="p">):</span> <span class="n">attrs</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">FloatField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">widget_attrs</span><span class="p">(</span><span class="n">widget</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">widget</span><span class="p">,</span> <span class="n">NumberInput</span><span class="p">)</span> <span class="ow">and</span> <span class="s1">'step'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">widget</span><span class="o">.</span><span class="n">attrs</span><span class="p">:</span> <span class="n">attrs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s1">'step'</span><span class="p">,</span> <span class="s1">'any'</span><span class="p">)</span> <span class="k">return</span> <span class="n">attrs</span></div> <div class="viewcode-block" id="DecimalField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.DecimalField">[docs]</a><span class="k">class</span> <span class="nc">DecimalField</span><span class="p">(</span><span class="n">IntegerField</span><span class="p">):</span> <span class="n">default_error_messages</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'invalid'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s1">'Enter a number.'</span><span class="p">),</span> <span class="s1">'max_digits'</span><span class="p">:</span> <span class="n">ungettext_lazy</span><span class="p">(</span> <span class="s1">'Ensure that there are no more than </span><span class="si">%(max)s</span><span class="s1"> digit in total.'</span><span class="p">,</span> <span class="s1">'Ensure that there are no more than </span><span class="si">%(max)s</span><span class="s1"> digits in total.'</span><span class="p">,</span> <span class="s1">'max'</span><span class="p">),</span> <span class="s1">'max_decimal_places'</span><span class="p">:</span> <span class="n">ungettext_lazy</span><span class="p">(</span> <span class="s1">'Ensure that there are no more than </span><span class="si">%(max)s</span><span class="s1"> decimal place.'</span><span class="p">,</span> <span class="s1">'Ensure that there are no more than </span><span class="si">%(max)s</span><span class="s1"> decimal places.'</span><span class="p">,</span> <span class="s1">'max'</span><span class="p">),</span> <span class="s1">'max_whole_digits'</span><span class="p">:</span> <span class="n">ungettext_lazy</span><span class="p">(</span> <span class="s1">'Ensure that there are no more than </span><span class="si">%(max)s</span><span class="s1"> digit before the decimal point.'</span><span class="p">,</span> <span class="s1">'Ensure that there are no more than </span><span class="si">%(max)s</span><span class="s1"> digits before the decimal point.'</span><span class="p">,</span> <span class="s1">'max'</span><span class="p">),</span> <span class="p">}</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">max_value</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">min_value</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">max_digits</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">decimal_places</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_digits</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">decimal_places</span> <span class="o">=</span> <span class="n">max_digits</span><span class="p">,</span> <span class="n">decimal_places</span> <span class="nb">super</span><span class="p">(</span><span class="n">DecimalField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">max_value</span><span class="p">,</span> <span class="n">min_value</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Validates that the input is a decimal number. Returns a Decimal</span> <span class="sd"> instance. Returns None for empty values. Ensures that there are no more</span> <span class="sd"> than max_digits in the number, and no more than decimal_places digits</span> <span class="sd"> after the decimal point.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span> <span class="k">return</span> <span class="kc">None</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">localize</span><span class="p">:</span> <span class="n">value</span> <span class="o">=</span> <span class="n">formats</span><span class="o">.</span><span class="n">sanitize_separators</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="n">value</span> <span class="o">=</span> <span class="n">smart_text</span><span class="p">(</span><span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">try</span><span class="p">:</span> <span class="n">value</span> <span class="o">=</span> <span class="n">Decimal</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">except</span> <span class="n">DecimalException</span><span class="p">:</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'invalid'</span><span class="p">)</span> <span class="k">return</span> <span class="n">value</span> <span class="k">def</span> <span class="nf">validate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="nb">super</span><span class="p">(</span><span class="n">DecimalField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span> <span class="k">return</span> <span class="c1"># Check for NaN, Inf and -Inf values. We can't compare directly for NaN,</span> <span class="c1"># since it is never equal to itself. However, NaN is the only value that</span> <span class="c1"># isn't equal to itself, so we can use this to identify NaN</span> <span class="k">if</span> <span class="n">value</span> <span class="o">!=</span> <span class="n">value</span> <span class="ow">or</span> <span class="n">value</span> <span class="o">==</span> <span class="n">Decimal</span><span class="p">(</span><span class="s2">"Inf"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">value</span> <span class="o">==</span> <span class="n">Decimal</span><span class="p">(</span><span class="s2">"-Inf"</span><span class="p">):</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'invalid'</span><span class="p">)</span> <span class="n">sign</span><span class="p">,</span> <span class="n">digittuple</span><span class="p">,</span> <span class="n">exponent</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">as_tuple</span><span class="p">()</span> <span class="n">decimals</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">(</span><span class="n">exponent</span><span class="p">)</span> <span class="c1"># digittuple doesn't include any leading zeros.</span> <span class="n">digits</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">digittuple</span><span class="p">)</span> <span class="k">if</span> <span class="n">decimals</span> <span class="o">></span> <span class="n">digits</span><span class="p">:</span> <span class="c1"># We have leading zeros up to or past the decimal point. Count</span> <span class="c1"># everything past the decimal point as a digit. We do not count</span> <span class="c1"># 0 before the decimal point as a digit since that would mean</span> <span class="c1"># we would not allow max_digits = decimal_places.</span> <span class="n">digits</span> <span class="o">=</span> <span class="n">decimals</span> <span class="n">whole_digits</span> <span class="o">=</span> <span class="n">digits</span> <span class="o">-</span> <span class="n">decimals</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_digits</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">digits</span> <span class="o">></span> <span class="bp">self</span><span class="o">.</span><span class="n">max_digits</span><span class="p">:</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'max_digits'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'max_digits'</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="p">{</span><span class="s1">'max'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_digits</span><span class="p">},</span> <span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">decimal_places</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">decimals</span> <span class="o">></span> <span class="bp">self</span><span class="o">.</span><span class="n">decimal_places</span><span class="p">:</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'max_decimal_places'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'max_decimal_places'</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="p">{</span><span class="s1">'max'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">decimal_places</span><span class="p">},</span> <span class="p">)</span> <span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">max_digits</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">decimal_places</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">whole_digits</span> <span class="o">></span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">max_digits</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">decimal_places</span><span class="p">)):</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'max_whole_digits'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'max_whole_digits'</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="p">{</span><span class="s1">'max'</span><span class="p">:</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">max_digits</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">decimal_places</span><span class="p">)},</span> <span class="p">)</span> <span class="k">return</span> <span class="n">value</span> <span class="k">def</span> <span class="nf">widget_attrs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">widget</span><span class="p">):</span> <span class="n">attrs</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">DecimalField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">widget_attrs</span><span class="p">(</span><span class="n">widget</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">widget</span><span class="p">,</span> <span class="n">NumberInput</span><span class="p">)</span> <span class="ow">and</span> <span class="s1">'step'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">widget</span><span class="o">.</span><span class="n">attrs</span><span class="p">:</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">decimal_places</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="c1"># Use exponential notation for small values since they might</span> <span class="c1"># be parsed as 0 otherwise. ref #20765</span> <span class="n">step</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'1'</span><span class="p">)</span> <span class="o">/</span> <span class="mi">10</span> <span class="o">**</span> <span class="bp">self</span><span class="o">.</span><span class="n">decimal_places</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">else</span><span class="p">:</span> <span class="n">step</span> <span class="o">=</span> <span class="s1">'any'</span> <span class="n">attrs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s1">'step'</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span> <span class="k">return</span> <span class="n">attrs</span></div> <span class="k">class</span> <span class="nc">BaseTemporalField</span><span class="p">(</span><span class="n">Field</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">input_formats</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="nb">super</span><span class="p">(</span><span class="n">BaseTemporalField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">if</span> <span class="n">input_formats</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">input_formats</span> <span class="o">=</span> <span class="n">input_formats</span> <span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="c1"># Try to coerce the value to unicode.</span> <span class="n">unicode_value</span> <span class="o">=</span> <span class="n">force_text</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">strings_only</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unicode_value</span><span class="p">,</span> <span class="n">six</span><span class="o">.</span><span class="n">text_type</span><span class="p">):</span> <span class="n">value</span> <span class="o">=</span> <span class="n">unicode_value</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="c1"># If unicode, try to strptime against each input format.</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">six</span><span class="o">.</span><span class="n">text_type</span><span class="p">):</span> <span class="k">for</span> <span class="nb">format</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">input_formats</span><span class="p">:</span> <span class="k">try</span><span class="p">:</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">format</span><span class="p">)</span> <span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span> <span class="k">continue</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'invalid'</span><span class="p">)</span> <span class="k">def</span> <span class="nf">strptime</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="nb">format</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s1">'Subclasses must define this method.'</span><span class="p">)</span> <div class="viewcode-block" id="DateField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.DateField">[docs]</a><span class="k">class</span> <span class="nc">DateField</span><span class="p">(</span><span class="n">BaseTemporalField</span><span class="p">):</span> <span class="n">widget</span> <span class="o">=</span> <span class="n">DateInput</span> <span class="n">input_formats</span> <span class="o">=</span> <span class="n">formats</span><span class="o">.</span><span class="n">get_format_lazy</span><span class="p">(</span><span class="s1">'DATE_INPUT_FORMATS'</span><span class="p">)</span> <span class="n">default_error_messages</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'invalid'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s1">'Enter a valid date.'</span><span class="p">),</span> <span class="p">}</span> <span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Validates that the input can be converted to a date. Returns a Python</span> <span class="sd"> datetime.date object.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span> <span class="k">return</span> <span class="kc">None</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">):</span> <span class="k">return</span> <span class="n">value</span><span class="o">.</span><span class="n">date</span><span class="p">()</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">):</span> <span class="k">return</span> <span class="n">value</span> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">DateField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">def</span> <span class="nf">strptime</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="nb">format</span><span class="p">):</span> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">force_str</span><span class="p">(</span><span class="n">value</span><span class="p">),</span> <span class="nb">format</span><span class="p">)</span><span class="o">.</span><span class="n">date</span><span class="p">()</span></div> <div class="viewcode-block" id="TimeField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.TimeField">[docs]</a><span class="k">class</span> <span class="nc">TimeField</span><span class="p">(</span><span class="n">BaseTemporalField</span><span class="p">):</span> <span class="n">widget</span> <span class="o">=</span> <span class="n">TimeInput</span> <span class="n">input_formats</span> <span class="o">=</span> <span class="n">formats</span><span class="o">.</span><span class="n">get_format_lazy</span><span class="p">(</span><span class="s1">'TIME_INPUT_FORMATS'</span><span class="p">)</span> <span class="n">default_error_messages</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'invalid'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s1">'Enter a valid time.'</span><span class="p">)</span> <span class="p">}</span> <span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Validates that the input can be converted to a time. Returns a Python</span> <span class="sd"> datetime.time object.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span> <span class="k">return</span> <span class="kc">None</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">time</span><span class="p">):</span> <span class="k">return</span> <span class="n">value</span> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">TimeField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">def</span> <span class="nf">strptime</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="nb">format</span><span class="p">):</span> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">force_str</span><span class="p">(</span><span class="n">value</span><span class="p">),</span> <span class="nb">format</span><span class="p">)</span><span class="o">.</span><span class="n">time</span><span class="p">()</span></div> <div class="viewcode-block" id="DateTimeField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.DateTimeField">[docs]</a><span class="k">class</span> <span class="nc">DateTimeField</span><span class="p">(</span><span class="n">BaseTemporalField</span><span class="p">):</span> <span class="n">widget</span> <span class="o">=</span> <span class="n">DateTimeInput</span> <span class="n">input_formats</span> <span class="o">=</span> <span class="n">formats</span><span class="o">.</span><span class="n">get_format_lazy</span><span class="p">(</span><span class="s1">'DATETIME_INPUT_FORMATS'</span><span class="p">)</span> <span class="n">default_error_messages</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'invalid'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s1">'Enter a valid date/time.'</span><span class="p">),</span> <span class="p">}</span> <span class="k">def</span> <span class="nf">prepare_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">):</span> <span class="n">value</span> <span class="o">=</span> <span class="n">to_current_timezone</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">return</span> <span class="n">value</span> <span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Validates that the input can be converted to a datetime. Returns a</span> <span class="sd"> Python datetime.datetime object.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span> <span class="k">return</span> <span class="kc">None</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">):</span> <span class="k">return</span> <span class="n">from_current_timezone</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">):</span> <span class="n">result</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">year</span><span class="p">,</span> <span class="n">value</span><span class="o">.</span><span class="n">month</span><span class="p">,</span> <span class="n">value</span><span class="o">.</span><span class="n">day</span><span class="p">)</span> <span class="k">return</span> <span class="n">from_current_timezone</span><span class="p">(</span><span class="n">result</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> <span class="c1"># Input comes from a SplitDateTimeWidget, for example. So, it's two</span> <span class="c1"># components: date and time.</span> <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span> <span class="s1">'Using SplitDateTimeWidget with DateTimeField is deprecated. '</span> <span class="s1">'Use SplitDateTimeField instead.'</span><span class="p">,</span> <span class="n">RemovedInDjango19Warning</span><span class="p">,</span> <span class="n">stacklevel</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">2</span><span class="p">:</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'invalid'</span><span class="p">)</span> <span class="k">if</span> <span class="n">value</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span> <span class="ow">and</span> <span class="n">value</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span> <span class="k">return</span> <span class="kc">None</span> <span class="n">value</span> <span class="o">=</span> <span class="s1">'</span><span class="si">%s</span><span class="s1"> </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="n">result</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">DateTimeField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">return</span> <span class="n">from_current_timezone</span><span class="p">(</span><span class="n">result</span><span class="p">)</span> <span class="k">def</span> <span class="nf">strptime</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="nb">format</span><span class="p">):</span> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">force_str</span><span class="p">(</span><span class="n">value</span><span class="p">),</span> <span class="nb">format</span><span class="p">)</span></div> <div class="viewcode-block" id="DurationField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.DurationField">[docs]</a><span class="k">class</span> <span class="nc">DurationField</span><span class="p">(</span><span class="n">Field</span><span class="p">):</span> <span class="n">default_error_messages</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'invalid'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s1">'Enter a valid duration.'</span><span class="p">),</span> <span class="p">}</span> <span class="k">def</span> <span class="nf">prepare_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">):</span> <span class="k">return</span> <span class="n">duration_string</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">return</span> <span class="n">value</span> <span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span> <span class="k">return</span> <span class="kc">None</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">):</span> <span class="k">return</span> <span class="n">value</span> <span class="n">value</span> <span class="o">=</span> <span class="n">parse_duration</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'invalid'</span><span class="p">)</span> <span class="k">return</span> <span class="n">value</span></div> <div class="viewcode-block" id="RegexField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.RegexField">[docs]</a><span class="k">class</span> <span class="nc">RegexField</span><span class="p">(</span><span class="n">CharField</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">regex</span><span class="p">,</span> <span class="n">max_length</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">min_length</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">error_message</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> regex can be either a string or a compiled regular expression object.</span> <span class="sd"> error_message is an optional error message to use, if</span> <span class="sd"> 'Enter a valid value' is too generic for you.</span> <span class="sd"> """</span> <span class="c1"># error_message is just kept for backwards compatibility:</span> <span class="k">if</span> <span class="n">error_message</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span> <span class="s2">"The 'error_message' argument is deprecated. Use "</span> <span class="s2">"Field.error_messages['invalid'] instead."</span><span class="p">,</span> <span class="n">RemovedInDjango110Warning</span><span class="p">,</span> <span class="n">stacklevel</span><span class="o">=</span><span class="mi">2</span> <span class="p">)</span> <span class="n">error_messages</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'error_messages'</span><span class="p">)</span> <span class="ow">or</span> <span class="p">{}</span> <span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid'</span><span class="p">]</span> <span class="o">=</span> <span class="n">error_message</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">'error_messages'</span><span class="p">]</span> <span class="o">=</span> <span class="n">error_messages</span> <span class="nb">super</span><span class="p">(</span><span class="n">RegexField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">max_length</span><span class="p">,</span> <span class="n">min_length</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_regex</span><span class="p">(</span><span class="n">regex</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_get_regex</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_regex</span> <span class="k">def</span> <span class="nf">_set_regex</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">regex</span><span class="p">):</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">regex</span><span class="p">,</span> <span class="n">six</span><span class="o">.</span><span class="n">string_types</span><span class="p">):</span> <span class="n">regex</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">regex</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">UNICODE</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">_regex</span> <span class="o">=</span> <span class="n">regex</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">'_regex_validator'</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_regex_validator</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">validators</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_regex_validator</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">_regex_validator</span> <span class="o">=</span> <span class="n">validators</span><span class="o">.</span><span class="n">RegexValidator</span><span class="p">(</span><span class="n">regex</span><span class="o">=</span><span class="n">regex</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_regex_validator</span><span class="p">)</span> <span class="n">regex</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">_get_regex</span><span class="p">,</span> <span class="n">_set_regex</span><span class="p">)</span></div> <div class="viewcode-block" id="EmailField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.EmailField">[docs]</a><span class="k">class</span> <span class="nc">EmailField</span><span class="p">(</span><span class="n">CharField</span><span class="p">):</span> <span class="n">widget</span> <span class="o">=</span> <span class="n">EmailInput</span> <span class="n">default_validators</span> <span class="o">=</span> <span class="p">[</span><span class="n">validators</span><span class="o">.</span><span class="n">validate_email</span><span class="p">]</span> <span class="k">def</span> <span class="nf">clean</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">EmailField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">clean</span><span class="p">(</span><span class="n">value</span><span class="p">)</span></div> <div class="viewcode-block" id="FileField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.FileField">[docs]</a><span class="k">class</span> <span class="nc">FileField</span><span class="p">(</span><span class="n">Field</span><span class="p">):</span> <span class="n">widget</span> <span class="o">=</span> <span class="n">ClearableFileInput</span> <span class="n">default_error_messages</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'invalid'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s2">"No file was submitted. Check the encoding type on the form."</span><span class="p">),</span> <span class="s1">'missing'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s2">"No file was submitted."</span><span class="p">),</span> <span class="s1">'empty'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s2">"The submitted file is empty."</span><span class="p">),</span> <span class="s1">'max_length'</span><span class="p">:</span> <span class="n">ungettext_lazy</span><span class="p">(</span> <span class="s1">'Ensure this filename has at most </span><span class="si">%(max)d</span><span class="s1"> character (it has </span><span class="si">%(length)d</span><span class="s1">).'</span><span class="p">,</span> <span class="s1">'Ensure this filename has at most </span><span class="si">%(max)d</span><span class="s1"> characters (it has </span><span class="si">%(length)d</span><span class="s1">).'</span><span class="p">,</span> <span class="s1">'max'</span><span class="p">),</span> <span class="s1">'contradiction'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s1">'Please either submit a file or check the clear checkbox, not both.'</span><span class="p">)</span> <span class="p">}</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_length</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'max_length'</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">allow_empty_file</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'allow_empty_file'</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span> <span class="nb">super</span><span class="p">(</span><span class="n">FileField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> <span class="k">if</span> <span class="n">data</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span> <span class="k">return</span> <span class="kc">None</span> <span class="c1"># UploadedFile objects should have name and size attributes.</span> <span class="k">try</span><span class="p">:</span> <span class="n">file_name</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">name</span> <span class="n">file_size</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">size</span> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'invalid'</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_length</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">file_name</span><span class="p">)</span> <span class="o">></span> <span class="bp">self</span><span class="o">.</span><span class="n">max_length</span><span class="p">:</span> <span class="n">params</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'max'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_length</span><span class="p">,</span> <span class="s1">'length'</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">file_name</span><span class="p">)}</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'max_length'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'max_length'</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">file_name</span><span class="p">:</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'invalid'</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">allow_empty_file</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">file_size</span><span class="p">:</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'empty'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'empty'</span><span class="p">)</span> <span class="k">return</span> <span class="n">data</span> <span class="k">def</span> <span class="nf">clean</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">initial</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> <span class="c1"># If the widget got contradictory inputs, we raise a validation error</span> <span class="k">if</span> <span class="n">data</span> <span class="ow">is</span> <span class="n">FILE_INPUT_CONTRADICTION</span><span class="p">:</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'contradiction'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'contradiction'</span><span class="p">)</span> <span class="c1"># False means the field value should be cleared; further validation is</span> <span class="c1"># not needed.</span> <span class="k">if</span> <span class="n">data</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">required</span><span class="p">:</span> <span class="k">return</span> <span class="kc">False</span> <span class="c1"># If the field is required, clearing is not possible (the widget</span> <span class="c1"># shouldn't return False data in that case anyway). False is not</span> <span class="c1"># in self.empty_value; if a False value makes it this far</span> <span class="c1"># it should be validated from here on out as None (so it will be</span> <span class="c1"># caught by the required check).</span> <span class="n">data</span> <span class="o">=</span> <span class="kc">None</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">data</span> <span class="ow">and</span> <span class="n">initial</span><span class="p">:</span> <span class="k">return</span> <span class="n">initial</span> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">FileField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">clean</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="k">def</span> <span class="nf">bound_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">initial</span><span class="p">):</span> <span class="k">if</span> <span class="n">data</span> <span class="ow">in</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">FILE_INPUT_CONTRADICTION</span><span class="p">):</span> <span class="k">return</span> <span class="n">initial</span> <span class="k">return</span> <span class="n">data</span> <span class="k">def</span> <span class="nf">has_changed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">initial</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> <span class="k">if</span> <span class="n">data</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="k">return</span> <span class="kc">False</span> <span class="k">return</span> <span class="kc">True</span></div> <div class="viewcode-block" id="ImageField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.ImageField">[docs]</a><span class="k">class</span> <span class="nc">ImageField</span><span class="p">(</span><span class="n">FileField</span><span class="p">):</span> <span class="n">default_error_messages</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'invalid_image'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span> <span class="s2">"Upload a valid image. The file you uploaded was either not an "</span> <span class="s2">"image or a corrupted image."</span> <span class="p">),</span> <span class="p">}</span> <span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Checks that the file-upload field data contains a valid image (GIF, JPG,</span> <span class="sd"> PNG, possibly others -- whatever the Python Imaging Library supports).</span> <span class="sd"> """</span> <span class="n">f</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">ImageField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="k">if</span> <span class="n">f</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="k">return</span> <span class="kc">None</span> <span class="kn">from</span> <span class="nn">PIL</span> <span class="k">import</span> <span class="n">Image</span> <span class="c1"># We need to get a file object for Pillow. We might have a path or we might</span> <span class="c1"># have to read the data into memory.</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="s1">'temporary_file_path'</span><span class="p">):</span> <span class="n">file</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">temporary_file_path</span><span class="p">()</span> <span class="k">else</span><span class="p">:</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="s1">'read'</span><span class="p">):</span> <span class="n">file</span> <span class="o">=</span> <span class="n">BytesIO</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">read</span><span class="p">())</span> <span class="k">else</span><span class="p">:</span> <span class="n">file</span> <span class="o">=</span> <span class="n">BytesIO</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="s1">'content'</span><span class="p">])</span> <span class="k">try</span><span class="p">:</span> <span class="c1"># load() could spot a truncated JPEG, but it loads the entire</span> <span class="c1"># image in memory, which is a DoS vector. See #3848 and #18520.</span> <span class="n">image</span> <span class="o">=</span> <span class="n">Image</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">file</span><span class="p">)</span> <span class="c1"># verify() must be called immediately after the constructor.</span> <span class="n">image</span><span class="o">.</span><span class="n">verify</span><span class="p">()</span> <span class="c1"># Annotating so subclasses can reuse it for their own validation</span> <span class="n">f</span><span class="o">.</span><span class="n">image</span> <span class="o">=</span> <span class="n">image</span> <span class="c1"># Pillow doesn't detect the MIME type of all formats. In those</span> <span class="c1"># cases, content_type will be None.</span> <span class="n">f</span><span class="o">.</span><span class="n">content_type</span> <span class="o">=</span> <span class="n">Image</span><span class="o">.</span><span class="n">MIME</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">image</span><span class="o">.</span><span class="n">format</span><span class="p">)</span> <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span> <span class="c1"># Pillow doesn't recognize it as an image.</span> <span class="n">six</span><span class="o">.</span><span class="n">reraise</span><span class="p">(</span><span class="n">ValidationError</span><span class="p">,</span> <span class="n">ValidationError</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid_image'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'invalid_image'</span><span class="p">,</span> <span class="p">),</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_info</span><span class="p">()[</span><span class="mi">2</span><span class="p">])</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="s1">'seek'</span><span class="p">)</span> <span class="ow">and</span> <span class="n">callable</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">seek</span><span class="p">):</span> <span class="n">f</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="k">return</span> <span class="n">f</span></div> <div class="viewcode-block" id="URLField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.URLField">[docs]</a><span class="k">class</span> <span class="nc">URLField</span><span class="p">(</span><span class="n">CharField</span><span class="p">):</span> <span class="n">widget</span> <span class="o">=</span> <span class="n">URLInput</span> <span class="n">default_error_messages</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'invalid'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s1">'Enter a valid URL.'</span><span class="p">),</span> <span class="p">}</span> <span class="n">default_validators</span> <span class="o">=</span> <span class="p">[</span><span class="n">validators</span><span class="o">.</span><span class="n">URLValidator</span><span class="p">()]</span> <span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="k">def</span> <span class="nf">split_url</span><span class="p">(</span><span class="n">url</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Returns a list of url parts via ``urlparse.urlsplit`` (or raises a</span> <span class="sd"> ``ValidationError`` exception for certain).</span> <span class="sd"> """</span> <span class="k">try</span><span class="p">:</span> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">urlsplit</span><span class="p">(</span><span class="n">url</span><span class="p">))</span> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span> <span class="c1"># urlparse.urlsplit can raise a ValueError with some</span> <span class="c1"># misformatted URLs.</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'invalid'</span><span class="p">)</span> <span class="n">value</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">URLField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">if</span> <span class="n">value</span><span class="p">:</span> <span class="n">url_fields</span> <span class="o">=</span> <span class="n">split_url</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">url_fields</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> <span class="c1"># If no URL scheme given, assume http://</span> <span class="n">url_fields</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'http'</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">url_fields</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span> <span class="c1"># Assume that if no domain is provided, that the path segment</span> <span class="c1"># contains the domain.</span> <span class="n">url_fields</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">url_fields</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="n">url_fields</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="s1">''</span> <span class="c1"># Rebuild the url_fields list, since the domain segment may now</span> <span class="c1"># contain the path too.</span> <span class="n">url_fields</span> <span class="o">=</span> <span class="n">split_url</span><span class="p">(</span><span class="n">urlunsplit</span><span class="p">(</span><span class="n">url_fields</span><span class="p">))</span> <span class="n">value</span> <span class="o">=</span> <span class="n">urlunsplit</span><span class="p">(</span><span class="n">url_fields</span><span class="p">)</span> <span class="k">return</span> <span class="n">value</span> <span class="k">def</span> <span class="nf">clean</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">URLField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">clean</span><span class="p">(</span><span class="n">value</span><span class="p">)</span></div> <div class="viewcode-block" id="BooleanField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.BooleanField">[docs]</a><span class="k">class</span> <span class="nc">BooleanField</span><span class="p">(</span><span class="n">Field</span><span class="p">):</span> <span class="n">widget</span> <span class="o">=</span> <span class="n">CheckboxInput</span> <span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="sd">"""Returns a Python boolean object."""</span> <span class="c1"># Explicitly check for the string 'False', which is what a hidden field</span> <span class="c1"># will submit for False. Also check for '0', since this is what</span> <span class="c1"># RadioSelect will provide. Because bool("True") == bool('1') == True,</span> <span class="c1"># we don't need to handle that explicitly.</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">six</span><span class="o">.</span><span class="n">string_types</span><span class="p">)</span> <span class="ow">and</span> <span class="n">value</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'false'</span><span class="p">,</span> <span class="s1">'0'</span><span class="p">):</span> <span class="n">value</span> <span class="o">=</span> <span class="kc">False</span> <span class="k">else</span><span class="p">:</span> <span class="n">value</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">BooleanField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">def</span> <span class="nf">validate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">value</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">required</span><span class="p">:</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'required'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'required'</span><span class="p">)</span> <span class="k">def</span> <span class="nf">has_changed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">initial</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> <span class="c1"># Sometimes data or initial could be None or '' which should be the</span> <span class="c1"># same thing as False.</span> <span class="k">if</span> <span class="n">initial</span> <span class="o">==</span> <span class="s1">'False'</span><span class="p">:</span> <span class="c1"># show_hidden_initial may have transformed False to 'False'</span> <span class="n">initial</span> <span class="o">=</span> <span class="kc">False</span> <span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="n">initial</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">bool</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></div> <div class="viewcode-block" id="NullBooleanField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.NullBooleanField">[docs]</a><span class="k">class</span> <span class="nc">NullBooleanField</span><span class="p">(</span><span class="n">BooleanField</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> A field whose valid values are None, True and False. Invalid values are</span> <span class="sd"> cleaned to None.</span> <span class="sd"> """</span> <span class="n">widget</span> <span class="o">=</span> <span class="n">NullBooleanSelect</span> <span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Explicitly checks for the string 'True' and 'False', which is what a</span> <span class="sd"> hidden field will submit for True and False, for 'true' and 'false',</span> <span class="sd"> which are likely to be returned by JavaScript serializations of forms,</span> <span class="sd"> and for '1' and '0', which is what a RadioField will submit. Unlike</span> <span class="sd"> the Booleanfield we need to explicitly check for True, because we are</span> <span class="sd"> not using the bool() function</span> <span class="sd"> """</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">in</span> <span class="p">(</span><span class="kc">True</span><span class="p">,</span> <span class="s1">'True'</span><span class="p">,</span> <span class="s1">'true'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">):</span> <span class="k">return</span> <span class="kc">True</span> <span class="k">elif</span> <span class="n">value</span> <span class="ow">in</span> <span class="p">(</span><span class="kc">False</span><span class="p">,</span> <span class="s1">'False'</span><span class="p">,</span> <span class="s1">'false'</span><span class="p">,</span> <span class="s1">'0'</span><span class="p">):</span> <span class="k">return</span> <span class="kc">False</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="kc">None</span> <span class="k">def</span> <span class="nf">validate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="k">pass</span> <span class="k">def</span> <span class="nf">has_changed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">initial</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> <span class="c1"># None (unknown) and False (No) are not the same</span> <span class="k">if</span> <span class="n">initial</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="n">initial</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="n">initial</span><span class="p">)</span> <span class="k">if</span> <span class="n">data</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="n">data</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="k">return</span> <span class="n">initial</span> <span class="o">!=</span> <span class="n">data</span></div> <span class="k">class</span> <span class="nc">CallableChoiceIterator</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">choices_func</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">choices_func</span> <span class="o">=</span> <span class="n">choices_func</span> <span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">choices_func</span><span class="p">():</span> <span class="k">yield</span> <span class="n">e</span> <div class="viewcode-block" id="ChoiceField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.ChoiceField">[docs]</a><span class="k">class</span> <span class="nc">ChoiceField</span><span class="p">(</span><span class="n">Field</span><span class="p">):</span> <span class="n">widget</span> <span class="o">=</span> <span class="n">Select</span> <span class="n">default_error_messages</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'invalid_choice'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s1">'Select a valid choice. </span><span class="si">%(value)s</span><span class="s1"> is not one of the available choices.'</span><span class="p">),</span> <span class="p">}</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="p">(),</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">widget</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">initial</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">help_text</span><span class="o">=</span><span class="s1">''</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="nb">super</span><span class="p">(</span><span class="n">ChoiceField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">required</span><span class="o">=</span><span class="n">required</span><span class="p">,</span> <span class="n">widget</span><span class="o">=</span><span class="n">widget</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="n">label</span><span class="p">,</span> <span class="n">initial</span><span class="o">=</span><span class="n">initial</span><span class="p">,</span> <span class="n">help_text</span><span class="o">=</span><span class="n">help_text</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">choices</span> <span class="o">=</span> <span class="n">choices</span> <span class="k">def</span> <span class="nf">__deepcopy__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">memo</span><span class="p">):</span> <span class="n">result</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">ChoiceField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__deepcopy__</span><span class="p">(</span><span class="n">memo</span><span class="p">)</span> <span class="n">result</span><span class="o">.</span><span class="n">_choices</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_choices</span><span class="p">,</span> <span class="n">memo</span><span class="p">)</span> <span class="k">return</span> <span class="n">result</span> <span class="k">def</span> <span class="nf">_get_choices</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_choices</span> <span class="k">def</span> <span class="nf">_set_choices</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="c1"># Setting choices also sets the choices on the widget.</span> <span class="c1"># choices can be any iterable, but we call list() on it because</span> <span class="c1"># it will be consumed more than once.</span> <span class="k">if</span> <span class="n">callable</span><span class="p">(</span><span class="n">value</span><span class="p">):</span> <span class="n">value</span> <span class="o">=</span> <span class="n">CallableChoiceIterator</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">value</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">_choices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">widget</span><span class="o">.</span><span class="n">choices</span> <span class="o">=</span> <span class="n">value</span> <span class="n">choices</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">_get_choices</span><span class="p">,</span> <span class="n">_set_choices</span><span class="p">)</span> <span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="s2">"Returns a Unicode object."</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span> <span class="k">return</span> <span class="s1">''</span> <span class="k">return</span> <span class="n">smart_text</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">def</span> <span class="nf">validate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Validates that the input is in self.choices.</span> <span class="sd"> """</span> <span class="nb">super</span><span class="p">(</span><span class="n">ChoiceField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">valid_value</span><span class="p">(</span><span class="n">value</span><span class="p">):</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid_choice'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'invalid_choice'</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="p">{</span><span class="s1">'value'</span><span class="p">:</span> <span class="n">value</span><span class="p">},</span> <span class="p">)</span> <span class="k">def</span> <span class="nf">valid_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="s2">"Check to see if the provided value is a valid choice"</span> <span class="n">text_value</span> <span class="o">=</span> <span class="n">force_text</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">choices</span><span class="p">:</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)):</span> <span class="c1"># This is an optgroup, so look inside the group for options</span> <span class="k">for</span> <span class="n">k2</span><span class="p">,</span> <span class="n">v2</span> <span class="ow">in</span> <span class="n">v</span><span class="p">:</span> <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="n">k2</span> <span class="ow">or</span> <span class="n">text_value</span> <span class="o">==</span> <span class="n">force_text</span><span class="p">(</span><span class="n">k2</span><span class="p">):</span> <span class="k">return</span> <span class="kc">True</span> <span class="k">else</span><span class="p">:</span> <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="n">k</span> <span class="ow">or</span> <span class="n">text_value</span> <span class="o">==</span> <span class="n">force_text</span><span class="p">(</span><span class="n">k</span><span class="p">):</span> <span class="k">return</span> <span class="kc">True</span> <span class="k">return</span> <span class="kc">False</span></div> <div class="viewcode-block" id="TypedChoiceField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.TypedChoiceField">[docs]</a><span class="k">class</span> <span class="nc">TypedChoiceField</span><span class="p">(</span><span class="n">ChoiceField</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">coerce</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'coerce'</span><span class="p">,</span> <span class="k">lambda</span> <span class="n">val</span><span class="p">:</span> <span class="n">val</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_value</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'empty_value'</span><span class="p">,</span> <span class="s1">''</span><span class="p">)</span> <span class="nb">super</span><span class="p">(</span><span class="n">TypedChoiceField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_coerce</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Validate that the value can be coerced to the right type (if not empty).</span> <span class="sd"> """</span> <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_value</span> <span class="ow">or</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_value</span> <span class="k">try</span><span class="p">:</span> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">coerce</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">,</span> <span class="n">ValidationError</span><span class="p">):</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid_choice'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'invalid_choice'</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="p">{</span><span class="s1">'value'</span><span class="p">:</span> <span class="n">value</span><span class="p">},</span> <span class="p">)</span> <span class="k">return</span> <span class="n">value</span> <span class="k">def</span> <span class="nf">clean</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="n">value</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">TypedChoiceField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">clean</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_coerce</span><span class="p">(</span><span class="n">value</span><span class="p">)</span></div> <div class="viewcode-block" id="MultipleChoiceField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.MultipleChoiceField">[docs]</a><span class="k">class</span> <span class="nc">MultipleChoiceField</span><span class="p">(</span><span class="n">ChoiceField</span><span class="p">):</span> <span class="n">hidden_widget</span> <span class="o">=</span> <span class="n">MultipleHiddenInput</span> <span class="n">widget</span> <span class="o">=</span> <span class="n">SelectMultiple</span> <span class="n">default_error_messages</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'invalid_choice'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s1">'Select a valid choice. </span><span class="si">%(value)s</span><span class="s1"> is not one of the available choices.'</span><span class="p">),</span> <span class="s1">'invalid_list'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s1">'Enter a list of values.'</span><span class="p">),</span> <span class="p">}</span> <span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span> <span class="k">return</span> <span class="p">[]</span> <span class="k">elif</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)):</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid_list'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'invalid_list'</span><span class="p">)</span> <span class="k">return</span> <span class="p">[</span><span class="n">smart_text</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">value</span><span class="p">]</span> <span class="k">def</span> <span class="nf">validate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Validates that the input is a list or tuple.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">required</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'required'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'required'</span><span class="p">)</span> <span class="c1"># Validate that each value in the value list is in self.choices.</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">value</span><span class="p">:</span> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">valid_value</span><span class="p">(</span><span class="n">val</span><span class="p">):</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid_choice'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'invalid_choice'</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="p">{</span><span class="s1">'value'</span><span class="p">:</span> <span class="n">val</span><span class="p">},</span> <span class="p">)</span> <span class="k">def</span> <span class="nf">has_changed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">initial</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> <span class="k">if</span> <span class="n">initial</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="n">initial</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">if</span> <span class="n">data</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="n">data</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">initial</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">):</span> <span class="k">return</span> <span class="kc">True</span> <span class="n">initial_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">force_text</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">initial</span><span class="p">)</span> <span class="n">data_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">force_text</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">data</span><span class="p">)</span> <span class="k">return</span> <span class="n">data_set</span> <span class="o">!=</span> <span class="n">initial_set</span></div> <div class="viewcode-block" id="TypedMultipleChoiceField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.TypedMultipleChoiceField">[docs]</a><span class="k">class</span> <span class="nc">TypedMultipleChoiceField</span><span class="p">(</span><span class="n">MultipleChoiceField</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">coerce</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'coerce'</span><span class="p">,</span> <span class="k">lambda</span> <span class="n">val</span><span class="p">:</span> <span class="n">val</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_value</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'empty_value'</span><span class="p">,</span> <span class="p">[])</span> <span class="nb">super</span><span class="p">(</span><span class="n">TypedMultipleChoiceField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_coerce</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Validates that the values are in self.choices and can be coerced to the</span> <span class="sd"> right type.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_value</span> <span class="ow">or</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_value</span> <span class="n">new_value</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">for</span> <span class="n">choice</span> <span class="ow">in</span> <span class="n">value</span><span class="p">:</span> <span class="k">try</span><span class="p">:</span> <span class="n">new_value</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">coerce</span><span class="p">(</span><span class="n">choice</span><span class="p">))</span> <span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">,</span> <span class="n">ValidationError</span><span class="p">):</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid_choice'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'invalid_choice'</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="p">{</span><span class="s1">'value'</span><span class="p">:</span> <span class="n">choice</span><span class="p">},</span> <span class="p">)</span> <span class="k">return</span> <span class="n">new_value</span> <span class="k">def</span> <span class="nf">clean</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="n">value</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">TypedMultipleChoiceField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">clean</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_coerce</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">def</span> <span class="nf">validate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="k">if</span> <span class="n">value</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_value</span><span class="p">:</span> <span class="nb">super</span><span class="p">(</span><span class="n">TypedMultipleChoiceField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">required</span><span class="p">:</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'required'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'required'</span><span class="p">)</span></div> <div class="viewcode-block" id="ComboField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.ComboField">[docs]</a><span class="k">class</span> <span class="nc">ComboField</span><span class="p">(</span><span class="n">Field</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> A Field whose clean() method calls multiple Field clean() methods.</span> <span class="sd"> """</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fields</span><span class="o">=</span><span class="p">(),</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="nb">super</span><span class="p">(</span><span class="n">ComboField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="c1"># Set 'required' to False on the individual fields, because the</span> <span class="c1"># required validation will be handled by ComboField, not by those</span> <span class="c1"># individual fields.</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">fields</span><span class="p">:</span> <span class="n">f</span><span class="o">.</span><span class="n">required</span> <span class="o">=</span> <span class="kc">False</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span> <span class="o">=</span> <span class="n">fields</span> <span class="k">def</span> <span class="nf">clean</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Validates the given value against all of self.fields, which is a</span> <span class="sd"> list of Field instances.</span> <span class="sd"> """</span> <span class="nb">super</span><span class="p">(</span><span class="n">ComboField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">clean</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">:</span> <span class="n">value</span> <span class="o">=</span> <span class="n">field</span><span class="o">.</span><span class="n">clean</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">return</span> <span class="n">value</span></div> <div class="viewcode-block" id="MultiValueField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.MultiValueField">[docs]</a><span class="k">class</span> <span class="nc">MultiValueField</span><span class="p">(</span><span class="n">Field</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> A Field that aggregates the logic of multiple Fields.</span> <span class="sd"> Its clean() method takes a "decompressed" list of values, which are then</span> <span class="sd"> cleaned into a single value according to self.fields. Each value in</span> <span class="sd"> this list is cleaned by the corresponding field -- the first value is</span> <span class="sd"> cleaned by the first field, the second value is cleaned by the second</span> <span class="sd"> field, etc. Once all fields are cleaned, the list of clean values is</span> <span class="sd"> "compressed" into a single value.</span> <span class="sd"> Subclasses should not have to implement clean(). Instead, they must</span> <span class="sd"> implement compress(), which takes a list of valid values and returns a</span> <span class="sd"> "compressed" version of those values -- a single value.</span> <span class="sd"> You'll probably want to use this with MultiWidget.</span> <span class="sd"> """</span> <span class="n">default_error_messages</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'invalid'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s1">'Enter a list of values.'</span><span class="p">),</span> <span class="s1">'incomplete'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s1">'Enter a complete value.'</span><span class="p">),</span> <span class="p">}</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fields</span><span class="o">=</span><span class="p">(),</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">require_all_fields</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'require_all_fields'</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span> <span class="nb">super</span><span class="p">(</span><span class="n">MultiValueField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">fields</span><span class="p">:</span> <span class="n">f</span><span class="o">.</span><span class="n">error_messages</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s1">'incomplete'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'incomplete'</span><span class="p">])</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">require_all_fields</span><span class="p">:</span> <span class="c1"># Set 'required' to False on the individual fields, because the</span> <span class="c1"># required validation will be handled by MultiValueField, not</span> <span class="c1"># by those individual fields.</span> <span class="n">f</span><span class="o">.</span><span class="n">required</span> <span class="o">=</span> <span class="kc">False</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span> <span class="o">=</span> <span class="n">fields</span> <span class="k">def</span> <span class="nf">__deepcopy__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">memo</span><span class="p">):</span> <span class="n">result</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">MultiValueField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__deepcopy__</span><span class="p">(</span><span class="n">memo</span><span class="p">)</span> <span class="n">result</span><span class="o">.</span><span class="n">fields</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">__deepcopy__</span><span class="p">(</span><span class="n">memo</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">)</span> <span class="k">return</span> <span class="n">result</span> <span class="k">def</span> <span class="nf">validate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="k">pass</span> <span class="k">def</span> <span class="nf">clean</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Validates every value in the given list. A value is validated against</span> <span class="sd"> the corresponding Field in self.fields.</span> <span class="sd"> For example, if this MultiValueField was instantiated with</span> <span class="sd"> fields=(DateField(), TimeField()), clean() would call</span> <span class="sd"> DateField.clean(value[0]) and TimeField.clean(value[1]).</span> <span class="sd"> """</span> <span class="n">clean_data</span> <span class="o">=</span> <span class="p">[]</span> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">value</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)):</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">value</span> <span class="ow">or</span> <span class="ow">not</span> <span class="p">[</span><span class="n">v</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">value</span> <span class="k">if</span> <span class="n">v</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">]:</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">required</span><span class="p">:</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'required'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'required'</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">compress</span><span class="p">([])</span> <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'invalid'</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">field</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">):</span> <span class="k">try</span><span class="p">:</span> <span class="n">field_value</span> <span class="o">=</span> <span class="n">value</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span> <span class="n">field_value</span> <span class="o">=</span> <span class="kc">None</span> <span class="k">if</span> <span class="n">field_value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">require_all_fields</span><span class="p">:</span> <span class="c1"># Raise a 'required' error if the MultiValueField is</span> <span class="c1"># required and any field is empty.</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">required</span><span class="p">:</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'required'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'required'</span><span class="p">)</span> <span class="k">elif</span> <span class="n">field</span><span class="o">.</span><span class="n">required</span><span class="p">:</span> <span class="c1"># Otherwise, add an 'incomplete' error to the list of</span> <span class="c1"># collected errors and skip field cleaning, if a required</span> <span class="c1"># field is empty.</span> <span class="k">if</span> <span class="n">field</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'incomplete'</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">errors</span><span class="p">:</span> <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'incomplete'</span><span class="p">])</span> <span class="k">continue</span> <span class="k">try</span><span class="p">:</span> <span class="n">clean_data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">clean</span><span class="p">(</span><span class="n">field_value</span><span class="p">))</span> <span class="k">except</span> <span class="n">ValidationError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> <span class="c1"># Collect all validation errors in a single list, which we'll</span> <span class="c1"># raise at the end of clean(), rather than raising a single</span> <span class="c1"># exception for the first error we encounter. Skip duplicates.</span> <span class="n">errors</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">m</span> <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">e</span><span class="o">.</span><span class="n">error_list</span> <span class="k">if</span> <span class="n">m</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">errors</span><span class="p">)</span> <span class="k">if</span> <span class="n">errors</span><span class="p">:</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span> <span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">compress</span><span class="p">(</span><span class="n">clean_data</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">out</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_validators</span><span class="p">(</span><span class="n">out</span><span class="p">)</span> <span class="k">return</span> <span class="n">out</span> <div class="viewcode-block" id="MultiValueField.compress"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.MultiValueField.compress">[docs]</a> <span class="k">def</span> <span class="nf">compress</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data_list</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Returns a single value for the given list of values. The values can be</span> <span class="sd"> assumed to be valid.</span> <span class="sd"> For example, if this MultiValueField was instantiated with</span> <span class="sd"> fields=(DateField(), TimeField()), this might return a datetime</span> <span class="sd"> object created by combining the date and time in data_list.</span> <span class="sd"> """</span> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s1">'Subclasses must implement this method.'</span><span class="p">)</span></div> <span class="k">def</span> <span class="nf">has_changed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">initial</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> <span class="k">if</span> <span class="n">initial</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="n">initial</span> <span class="o">=</span> <span class="p">[</span><span class="s1">''</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))]</span> <span class="k">else</span><span class="p">:</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">initial</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> <span class="n">initial</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">widget</span><span class="o">.</span><span class="n">decompress</span><span class="p">(</span><span class="n">initial</span><span class="p">)</span> <span class="k">for</span> <span class="n">field</span><span class="p">,</span> <span class="n">initial</span><span class="p">,</span> <span class="n">data</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">,</span> <span class="n">initial</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> <span class="k">try</span><span class="p">:</span> <span class="n">initial</span> <span class="o">=</span> <span class="n">field</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">initial</span><span class="p">)</span> <span class="k">except</span> <span class="n">ValidationError</span><span class="p">:</span> <span class="k">return</span> <span class="kc">True</span> <span class="k">if</span> <span class="n">field</span><span class="o">.</span><span class="n">has_changed</span><span class="p">(</span><span class="n">initial</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> <span class="k">return</span> <span class="kc">True</span> <span class="k">return</span> <span class="kc">False</span></div> <div class="viewcode-block" id="FilePathField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.FilePathField">[docs]</a><span class="k">class</span> <span class="nc">FilePathField</span><span class="p">(</span><span class="n">ChoiceField</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">match</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">allow_files</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">allow_folders</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">widget</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">initial</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">help_text</span><span class="o">=</span><span class="s1">''</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">match</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">recursive</span> <span class="o">=</span> <span class="n">path</span><span class="p">,</span> <span class="n">match</span><span class="p">,</span> <span class="n">recursive</span> <span class="bp">self</span><span class="o">.</span><span class="n">allow_files</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">allow_folders</span> <span class="o">=</span> <span class="n">allow_files</span><span class="p">,</span> <span class="n">allow_folders</span> <span class="nb">super</span><span class="p">(</span><span class="n">FilePathField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">choices</span><span class="o">=</span><span class="p">(),</span> <span class="n">required</span><span class="o">=</span><span class="n">required</span><span class="p">,</span> <span class="n">widget</span><span class="o">=</span><span class="n">widget</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="n">label</span><span class="p">,</span> <span class="n">initial</span><span class="o">=</span><span class="n">initial</span><span class="p">,</span> <span class="n">help_text</span><span class="o">=</span><span class="n">help_text</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">required</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">choices</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">else</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">choices</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">""</span><span class="p">,</span> <span class="s2">"---------"</span><span class="p">)]</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">match</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">match_re</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">match</span><span class="p">)</span> <span class="k">if</span> <span class="n">recursive</span><span class="p">:</span> <span class="k">for</span> <span class="n">root</span><span class="p">,</span> <span class="n">dirs</span><span class="p">,</span> <span class="n">files</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">)):</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">allow_files</span><span class="p">:</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">files</span><span class="p">:</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">match</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">match_re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">f</span><span class="p">):</span> <span class="n">f</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">f</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">choices</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">f</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">""</span><span class="p">,</span> <span class="mi">1</span><span class="p">)))</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">allow_folders</span><span class="p">:</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">dirs</span><span class="p">:</span> <span class="k">if</span> <span class="n">f</span> <span class="o">==</span> <span class="s1">'__pycache__'</span><span class="p">:</span> <span class="k">continue</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">match</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">match_re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">f</span><span class="p">):</span> <span class="n">f</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">f</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">choices</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">f</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">""</span><span class="p">,</span> <span class="mi">1</span><span class="p">)))</span> <span class="k">else</span><span class="p">:</span> <span class="k">try</span><span class="p">:</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">)):</span> <span class="k">if</span> <span class="n">f</span> <span class="o">==</span> <span class="s1">'__pycache__'</span><span class="p">:</span> <span class="k">continue</span> <span class="n">full_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="n">f</span><span class="p">)</span> <span class="k">if</span> <span class="p">(((</span><span class="bp">self</span><span class="o">.</span><span class="n">allow_files</span> <span class="ow">and</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">full_file</span><span class="p">))</span> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">allow_folders</span> <span class="ow">and</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">full_file</span><span class="p">)))</span> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">match</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">match_re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">f</span><span class="p">))):</span> <span class="bp">self</span><span class="o">.</span><span class="n">choices</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">full_file</span><span class="p">,</span> <span class="n">f</span><span class="p">))</span> <span class="k">except</span> <span class="ne">OSError</span><span class="p">:</span> <span class="k">pass</span> <span class="bp">self</span><span class="o">.</span><span class="n">widget</span><span class="o">.</span><span class="n">choices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">choices</span></div> <div class="viewcode-block" id="SplitDateTimeField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.SplitDateTimeField">[docs]</a><span class="k">class</span> <span class="nc">SplitDateTimeField</span><span class="p">(</span><span class="n">MultiValueField</span><span class="p">):</span> <span class="n">widget</span> <span class="o">=</span> <span class="n">SplitDateTimeWidget</span> <span class="n">hidden_widget</span> <span class="o">=</span> <span class="n">SplitHiddenDateTimeWidget</span> <span class="n">default_error_messages</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'invalid_date'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s1">'Enter a valid date.'</span><span class="p">),</span> <span class="s1">'invalid_time'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s1">'Enter a valid time.'</span><span class="p">),</span> <span class="p">}</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">input_date_formats</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">input_time_formats</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="n">errors</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_error_messages</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">if</span> <span class="s1">'error_messages'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">errors</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">'error_messages'</span><span class="p">])</span> <span class="n">localize</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'localize'</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span> <span class="n">fields</span> <span class="o">=</span> <span class="p">(</span> <span class="n">DateField</span><span class="p">(</span><span class="n">input_formats</span><span class="o">=</span><span class="n">input_date_formats</span><span class="p">,</span> <span class="n">error_messages</span><span class="o">=</span><span class="p">{</span><span class="s1">'invalid'</span><span class="p">:</span> <span class="n">errors</span><span class="p">[</span><span class="s1">'invalid_date'</span><span class="p">]},</span> <span class="n">localize</span><span class="o">=</span><span class="n">localize</span><span class="p">),</span> <span class="n">TimeField</span><span class="p">(</span><span class="n">input_formats</span><span class="o">=</span><span class="n">input_time_formats</span><span class="p">,</span> <span class="n">error_messages</span><span class="o">=</span><span class="p">{</span><span class="s1">'invalid'</span><span class="p">:</span> <span class="n">errors</span><span class="p">[</span><span class="s1">'invalid_time'</span><span class="p">]},</span> <span class="n">localize</span><span class="o">=</span><span class="n">localize</span><span class="p">),</span> <span class="p">)</span> <span class="nb">super</span><span class="p">(</span><span class="n">SplitDateTimeField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">fields</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">def</span> <span class="nf">compress</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data_list</span><span class="p">):</span> <span class="k">if</span> <span class="n">data_list</span><span class="p">:</span> <span class="c1"># Raise a validation error if time or date is empty</span> <span class="c1"># (possible if SplitDateTimeField has required=False).</span> <span class="k">if</span> <span class="n">data_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid_date'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'invalid_date'</span><span class="p">)</span> <span class="k">if</span> <span class="n">data_list</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid_time'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'invalid_time'</span><span class="p">)</span> <span class="n">result</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">combine</span><span class="p">(</span><span class="o">*</span><span class="n">data_list</span><span class="p">)</span> <span class="k">return</span> <span class="n">from_current_timezone</span><span class="p">(</span><span class="n">result</span><span class="p">)</span> <span class="k">return</span> <span class="kc">None</span></div> <div class="viewcode-block" id="IPAddressField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.IPAddressField">[docs]</a><span class="k">class</span> <span class="nc">IPAddressField</span><span class="p">(</span><span class="n">CharField</span><span class="p">):</span> <span class="n">default_validators</span> <span class="o">=</span> <span class="p">[</span><span class="n">validators</span><span class="o">.</span><span class="n">validate_ipv4_address</span><span class="p">]</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s2">"IPAddressField has been deprecated. Use GenericIPAddressField instead."</span><span class="p">,</span> <span class="n">RemovedInDjango19Warning</span><span class="p">)</span> <span class="nb">super</span><span class="p">(</span><span class="n">IPAddressField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span> <span class="k">return</span> <span class="s1">''</span> <span class="k">return</span> <span class="n">value</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span></div> <div class="viewcode-block" id="GenericIPAddressField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.GenericIPAddressField">[docs]</a><span class="k">class</span> <span class="nc">GenericIPAddressField</span><span class="p">(</span><span class="n">CharField</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">protocol</span><span class="o">=</span><span class="s1">'both'</span><span class="p">,</span> <span class="n">unpack_ipv4</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">unpack_ipv4</span> <span class="o">=</span> <span class="n">unpack_ipv4</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_validators</span> <span class="o">=</span> <span class="n">validators</span><span class="o">.</span><span class="n">ip_address_validators</span><span class="p">(</span><span class="n">protocol</span><span class="p">,</span> <span class="n">unpack_ipv4</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="nb">super</span><span class="p">(</span><span class="n">GenericIPAddressField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span> <span class="k">return</span> <span class="s1">''</span> <span class="n">value</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">and</span> <span class="s1">':'</span> <span class="ow">in</span> <span class="n">value</span><span class="p">:</span> <span class="k">return</span> <span class="n">clean_ipv6_address</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">unpack_ipv4</span><span class="p">)</span> <span class="k">return</span> <span class="n">value</span></div> <div class="viewcode-block" id="SlugField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.SlugField">[docs]</a><span class="k">class</span> <span class="nc">SlugField</span><span class="p">(</span><span class="n">CharField</span><span class="p">):</span> <span class="n">default_validators</span> <span class="o">=</span> <span class="p">[</span><span class="n">validators</span><span class="o">.</span><span class="n">validate_slug</span><span class="p">]</span> <span class="k">def</span> <span class="nf">clean</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">SlugField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">clean</span><span class="p">(</span><span class="n">value</span><span class="p">)</span></div> <div class="viewcode-block" id="UUIDField"><a class="viewcode-back" href="../../../ref/forms/fields.html#django.forms.UUIDField">[docs]</a><span class="k">class</span> <span class="nc">UUIDField</span><span class="p">(</span><span class="n">CharField</span><span class="p">):</span> <span class="n">default_error_messages</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'invalid'</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s1">'Enter a valid UUID.'</span><span class="p">),</span> <span class="p">}</span> <span class="k">def</span> <span class="nf">prepare_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">uuid</span><span class="o">.</span><span class="n">UUID</span><span class="p">):</span> <span class="k">return</span> <span class="n">value</span><span class="o">.</span><span class="n">hex</span> <span class="k">return</span> <span class="n">value</span> <span class="k">def</span> <span class="nf">to_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="n">value</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">UUIDField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">to_python</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_values</span><span class="p">:</span> <span class="k">return</span> <span class="kc">None</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">uuid</span><span class="o">.</span><span class="n">UUID</span><span class="p">):</span> <span class="k">try</span><span class="p">:</span> <span class="n">value</span> <span class="o">=</span> <span class="n">uuid</span><span class="o">.</span><span class="n">UUID</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span> <span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s1">'invalid'</span><span class="p">],</span> <span class="n">code</span><span class="o">=</span><span class="s1">'invalid'</span><span class="p">)</span> <span class="k">return</span> <span class="n">value</span></div> </pre></div> </div> </div> </div> <div class="yui-b" id="sidebar"> <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebarwrapper"> <h3>Browse</h3> <ul> </ul> <h3>You are here:</h3> <ul> <li> <a href="../../../index.html">Django 1.8.19 documentation</a> <ul><li><a href="../../index.html">Module code</a> <ul><li><a href="../../django.html">django</a> <ul><li>django.forms.fields</li></ul> </li></ul></li></ul> </li> </ul> <div id="searchbox" style="display: none" role="search"> <h3>Quick search</h3> <form class="search" action="../../../search.html" method="get"> <div><input type="text" name="q" /></div> <div><input type="submit" value="Go" /></div> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <h3>Last update:</h3> <p class="topless">Mar 10, 2018</p> </div> </div> <div id="ft"> <div class="nav"> <a href="../../index.html" title="Module code" accesskey="U">up</a></div> </div> </div> <div class="clearer"></div> </div> </body> </html>