{"title":"Trabalhando com formulários","version":"2.0","locale":"pt-br","docname":"topics/forms/index","url":"/pt-br/2.0/topics/forms/","canonical":"https://djangodocs.dev/pt-br/2.0/topics/forms/","summary":"Sobre este documento Este documento fornece uma introdução ao básico de formulários web e como eles são manipulados no Django. Para mais detalhes olhe nas áreas…","html":"<h1>Trabalhando com formulários<a class=\"heading-anchor\" href=\"#working-with-forms\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h1>\n<aside class=\"admonition-about-this-document admonition\">\n<p class=\"admonition-title\">Sobre este documento</p>\n<p>Este documento fornece uma introdução ao básico de formulários web e como eles são manipulados no Django. Para mais detalhes olhe nas áreas específica da API de formulários, veja <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/\"><span class=\"doc\">The Forms API</span></a>, <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/fields/\"><span class=\"doc\">Form fields</span></a>, e <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/validation/\"><span class=\"doc\">Form and field validation</span></a>.</p>\n</aside>\n<p>A menos que você planeje construir websites e aplicações que não façam outra coisa além de publicar conteúdo, e não aceita entrada de seus visitantes, você irá precisar entender e usar formulários.</p>\n<p>O Django fornece uma gama de ferramentas e bibliotecas para auxiliar a construção de formulários para entrada de dados vindos dos seus visitantes, e então os processa e responde àquela entrada.</p>\n<section id=\"html-forms\">\n<h2>Formulários HTML<a class=\"heading-anchor\" href=\"#html-forms\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Em HTML, um formulário é uma coleção de elementos dentro de <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;...&lt;/form&gt;</span></code> que permitem que os visitantes façam coisas como escrever um texto, selecionar opções, manipular objetos ou controle e assim por diante, e então enviar esta informação de volta ao servidor.</p>\n<p>Alguns destes elementos da interface do formulário - entrada de texto ou “checkboxes”- são bem simples e fazem parte do próprio HTML. Outros são bem mais complexos; uma interface que faz saltar um seletor de datas ou permite mover uma barra ou manipular controles irá usa geralmente javascript e CSS bem como elementos <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> de formulários HTML  para tornar possíveis estes efeitos.</p>\n<p>Assim como seus elementos <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code>, um formulário precisa especificar duas coisas:</p>\n<ul class=\"simple\">\n<li><p><em>onde</em>: a URL para a qual o dado correspondente à entrada do usuário deve ser enviado.</p></li>\n<li><p><em>como</em>: o método HTTP pelo qual o dado deve ser retornado</p></li>\n</ul>\n<p>Como um exemplo, o formulário de autenticação do admin do Django contém vários elementos do tipo <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code>: um <code class=\"docutils literal notranslate\"><span class=\"pre\">type=&quot;text&quot;</span></code> para o nome do usuário, um de <code class=\"docutils literal notranslate\"><span class=\"pre\">type=&quot;password&quot;</span></code> para a senha, e um <code class=\"docutils literal notranslate\"><span class=\"pre\">type=&quot;submit&quot;</span></code> par ao botão “Log in”. Ele também contém alguns objetos escondidos do tipo texto que o usuário não vê, o qual o Django usa para determinar o que fazer depois.</p>\n<p>Ele também dia ao navegador web que os dados do formulário devem ser enviados para a URL especificada no atributo <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;action&gt;</span></code> do <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code> - <code class=\"docutils literal notranslate\"><span class=\"pre\">/admin/</span></code> - e isso deve ser enviado usando o mecanismo HTTP especificado pelo atributo <code class=\"docutils literal notranslate\"><span class=\"pre\">method</span></code> - <code class=\"docutils literal notranslate\"><span class=\"pre\">post</span></code>.</p>\n<p>Quando o elemento <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;submit&quot;</span> <span class=\"pre\">value=&quot;Log</span> <span class=\"pre\">in&quot;&gt;</span></code> e disparado, os dados são retornados para <code class=\"docutils literal notranslate\"><span class=\"pre\">/admin/</span></code>.</p>\n<section id=\"get-and-post\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> e <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code><a class=\"heading-anchor\" href=\"#get-and-post\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> e <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> são os únicos métodos HTTP a se usar enquanto lida com formulários.</p>\n<p>O formulário de autenticação do Django é retornado usando o método <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code>, no qual o navegador web empacota os dados do formulário, codifica-os para transmissão, envia para o servidor, e então recebe de volta sua resposta.</p>\n<p>O <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code>, em contraste, empacota os dados enviados em uma string, e usa isso para compor a URL. A URL contém o endereço para onde o dado deve ser enviado, bem como as chaves dos dados e valore. Você pode ver isso em ação se você fizer uma busca na documentação do Django, a qual irá produzir uma URL na forma de <code class=\"docutils literal notranslate\"><span class=\"pre\">https://docs.djangoproject.com/search/?q=forms&amp;release=1</span></code>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> e <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> são tipicamente usados para propósitos distintos.</p>\n<p>Qualquer requisição que pode ser usada para alterar o estado do sistema - por exemplo, uma requisição que faz alterações no banco de dados - deve usar <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code>. O <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> deve ser usado somente para requisições que não afetam o estado do sistema.</p>\n<p>O <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> também não é adequado para formulários com senhas, porque a senha apareceria na URL, e portanto, também no histórico do navegador web e logs do servidor, tudo em texto puro. Nem mesmo seria adequado para grandes quantidade de dados, ou para dados binários, como uma imagem. Uma aplicação web que usa as requisições to tipo  <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> para formulários de administração é um risco de segurança: pode ser fácil para um ataque imitar uma requisição de um formulário para ter acesso a partes sensíveis do sistema. O <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> juntamente com outras proteções como a <a class=\"reference internal\" href=\"/pt-br/2.0/ref/csrf/\"><span class=\"doc\">proteção CSRF</span></a> do Django oferece mais controle sobre o acesso.</p>\n<p>Por outro lado, o <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> é adequado para coisas como um formulário web de busca, porque a URL que represente uma requisição do tipo <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> pode ser facilmente adicionado a lista de favoritos, comparilhada ou reenviada.</p>\n</section>\n</section>\n<section id=\"django-s-role-in-forms\">\n<h2>Regras do Django em formulários<a class=\"heading-anchor\" href=\"#django-s-role-in-forms\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Lidar com formulários é uma coisa complexa. Considere o admin do Django, onde inúmeros itens de dados de diferentes tipos precisam ser preparados para serem visualizados em um formulário, renderizados como HTML, editado usando uma interface conveniente, retornados ao servidor, validados e limpos, e então salvos ou passados adiante para mais processamento.</p>\n<p>A funcionalidade de formulários do Django pode simplificar e automatizar uma boa parte deste trabalho, e pode também fazer isso de maneira mais segura que a maioria dos programadores poderiam ser capazes de fazer no código que escrevem.</p>\n<p>O Django lida com três partes distintas do trabalho envolvendo formulários:</p>\n<ul class=\"simple\">\n<li><p>Preparando e reestruturando os dados para torná-los prontos para rederização</p></li>\n<li><p>criando formulários HTML para os dados</p></li>\n<li><p>recebendo e processando formulário enviado e os dados vindos do cliente</p></li>\n</ul>\n<p>É <em>possível</em> escrever código que faz tudo isso manualmente, mas o Django pode tomar conta de tudo isso pra você.</p>\n</section>\n<section id=\"forms-in-django\">\n<h2>Formulários no Django<a class=\"heading-anchor\" href=\"#forms-in-django\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Descrevemos brevemente os formulários HTML, mas um <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code> HTML é apenas uma parte do maquinário requerido.</p>\n<p>Dentro do contexto de uma aplicação web, um ‘formulário’ talvez se refira ao <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code>  HTML, ou a <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> do Django que o produz, ou ao dado estruturado retornado quando este é enviado, ou ao conjunto funcional de todas essas partes.</p>\n<section id=\"the-django-form-class\">\n<h3>A classe <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> do Django<a class=\"heading-anchor\" href=\"#the-django-form-class\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>No coração deste sistema de componentes está a classe <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> do Django. Mais ou menos como o modelo do Django descreve a estrutura lógica de um objeto, seu comportamento, e a maneira como suas partes são apresentadas para nós, uma classe <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> descreve um formulário e determina como este funciona e aparece.</p>\n<p>De maneira similar que a classe de modelo mapeia os campos para o banco de dados, uma classe de formulário mapeia para os elementos <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> do formulário HTML. (Uma <a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code></a> mapeia os campos de uma classe de modelo para elementos <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> do formulário HTML através da <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a>; o admin do Django é baseado nisso.)</p>\n<p>Os campos dos formulários são eles próprios classes; eles manipulam dados do formulário e fazem validações quando o formulário é enviado. A <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/fields/#django.forms.DateField\" title=\"django.forms.DateField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateField</span></code></a> e a <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/fields/#django.forms.FileField\" title=\"django.forms.FileField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileField</span></code></a> lidam com tipos de dados muito diferentes e tem que fazer coisas diferentes com isso.</p>\n<p>Um campo de formulário, para o usuário,  é representado como um  “widget” HTML - um pedaço do maquinário de interface do usuário. Cada campo tem uma <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/widgets/\"><span class=\"doc\">classe de Widget</span></a> padrão, mas isso pode ser sobrescrito quando requerido.</p>\n</section>\n<section id=\"instantiating-processing-and-rendering-forms\">\n<h3>Instanciando, processando, e renderizando formulários<a class=\"heading-anchor\" href=\"#instantiating-processing-and-rendering-forms\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Quando renderizar um objeto no Django, em geral:</p>\n<ol class=\"arabic simple\">\n<li><p>pegamos o objeto na “view” (lido no banco de dados, por exemplo)</p></li>\n<li><p>o passamos para o “context” do template</p></li>\n<li><p>expandimos para a marcação HTML usando variáveis de template</p></li>\n</ol>\n<p>Mostrar um formulário em um template envolve quase o mesmo trabalho que mostrar qualquer outro tipo de objeto, mas existem algumas diferenças chave.</p>\n<p>No caso de uma instância de modelo que não contém nenhum dado, é raramente útil ou talvez nunca seja útil para fazer nada com isso no template. Por outro lado, faz todo o sentido, mostrar um formulário vazio - que é o que fazemos quando queremos que o usuário o preencha.</p>\n<p>Então quando lidamos com uma instância de modelo em uma “view”, nós tipicamente a recuperamos do banco de dados. Quando lidamos com um formulário, nós tipicamente o instanciamos na “view”.</p>\n<p>Quando nós instanciamos um formulário, nós podemos optar por deixá-lo vazio ou o pré-preenchemos, por exemplo com:</p>\n<ul class=\"simple\">\n<li><p>dados vindos de uma instância de modelo salva previamente (como no caso dos formulários do admin para edição)</p></li>\n<li><p>dados que tenhamos coletado de outras fontes</p></li>\n<li><p>dados recebidos de uma prévia submissão de formulário</p></li>\n</ul>\n<p>O último destes casos é o mais interessante, porque é o que torna possível para um usuário não somente ler um site web, mas enviar informação de volta a ele.</p>\n</section>\n</section>\n<section id=\"building-a-form\">\n<h2>Construindo um formulário<a class=\"heading-anchor\" href=\"#building-a-form\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"the-work-that-needs-to-be-done\">\n<h3>O trabalho que tem que ser feito<a class=\"heading-anchor\" href=\"#the-work-that-needs-to-be-done\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Suponha queira criar um formulário simples no seu site web, de modo a obter o nome do usuário. Você precisaria de algo como isso aqui no seu template:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">form</span> <span class=\"na\">action</span><span class=\"o\">=</span><span class=\"s\">&quot;/your-name/&quot;</span> <span class=\"na\">method</span><span class=\"o\">=</span><span class=\"s\">&quot;post&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span><span class=\"p\">&gt;</span>Your name: <span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;text&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">current_name</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;submit&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;OK&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">form</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Isso diz ao navegador web para retornar os dados do form para a URL <code class=\"docutils literal notranslate\"><span class=\"pre\">/your-name/</span></code>, usando o métodos <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code>. Ele irá mostrar um campo, chamado “Your name:”, e um botão com um “OK”. Se o “context” do template contiver uma variável chamada <code class=\"docutils literal notranslate\"><span class=\"pre\">current_name</span></code>, esta será usada para pré-preencher o campo <code class=\"docutils literal notranslate\"><span class=\"pre\">your_name</span></code>.</p>\n<p>Você irá precisar uma “view” que renderiza o template contendo o formulário HTML, e que pode fornecer o campo <code class=\"docutils literal notranslate\"><span class=\"pre\">current_name</span></code> apropriadamente.</p>\n<p>Quando o formulário é submetido, a requisição do tipo <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> a qual é enviada ao servidor irá conter os dados do formulário.</p>\n<p>Agora você irá também precisar de uma “view” que corresponda aquela URL <code class=\"docutils literal notranslate\"><span class=\"pre\">/your-name/</span></code> a qual irá encontrar o par chave/valor apropriado na requisição e então processá-lo.</p>\n<p>Este é um formulário muito simples. Na prática, um formulário pode conter dezenas ou centenas de campos, muitos dos quais talvez precisem ser pré-preenchidos, e talvez nós esperamos que o usuário trabalhe através do ciclo de edição e submissão muitas vezes antes de concluir a operação.</p>\n<p>Nós podemos requerer que alguma validação ocorra no navegador web, mesmo antes do formulário ser submetido; nós podemos querer usar campos bem mais complexos, que possibilite ao usuário selecionar uma data de um calendário e assim por diante.</p>\n<p>Neste ponto é muito mais fácil ter o Django fazendo a maior parte deste trabalho para nós.</p>\n</section>\n<section id=\"building-a-form-in-django\">\n<h3>Construindo um formulário no Django<a class=\"heading-anchor\" href=\"#building-a-form-in-django\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"the-form-class\">\n<h4>A classe <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a><a class=\"heading-anchor\" href=\"#the-form-class\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Nós já sabemos como queremos que o nosso formulário HTML se pareça. Nosso ponto de início para isso no Django é este:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>forms.py</code></figcaption><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"forms.py\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">NameForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">your_name</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">label</span><span class=\"o\">=</span><span class=\"s1\">&#39;Your name&#39;</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>Este código define uma classe <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> com um único campo (<code class=\"docutils literal notranslate\"><span class=\"pre\">your_name</span></code>). Nós aplicamos uma etiqueta ao campo mais legível a seres humanos, a qual irá aparecer na <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> quando for renderizado (embora neste caso o <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/fields/#django.forms.Field.label\" title=\"django.forms.Field.label\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">label</span></code></a> que especificamos é o mesmo que seria gerado automaticamente se o tivéssemos omitido).</p>\n<p>O tamanho máximo do conteúdo do campo é definido pelo <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/fields/#django.forms.CharField.max_length\" title=\"django.forms.CharField.max_length\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">max_length</span></code></a>. Isso faz duas coisas. Define a  <code class=\"docutils literal notranslate\"><span class=\"pre\">maxlength=&quot;100&quot;</span></code> no <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> HTML (então o navegador web impedirá que o usuário entre com um número de caracteres maio que aquele definido). Isso também significa que quando o Django receber o form de volta do navegador, o Django validará o comprimento do dado.</p>\n<p>Uma instância da <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> tem um método <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#django.forms.Form.is_valid\" title=\"django.forms.Form.is_valid\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code></a>, o qual executa rotinas de validações para todos os campos. Quando este método é chamado, se todos os campos contiverem dados válidos, ele irá:</p>\n<ul class=\"simple\">\n<li><p>retornar <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code></p></li>\n<li><p>colocar os dados do formulário no atributo <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#django.forms.Form.cleaned_data\" title=\"django.forms.Form.cleaned_data\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">cleaned_data</span></code></a> do formulário.</p></li>\n</ul>\n<p>O formulário, quando renderizado pela primeira vez, se parecerá com:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span><span class=\"p\">&gt;</span>Your name: <span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;text&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span> <span class=\"na\">maxlength</span><span class=\"o\">=</span><span class=\"s\">&quot;100&quot;</span> <span class=\"na\">required</span> <span class=\"p\">/&gt;</span>\n</code></pre></div>\n<p>Repare que <em>não</em>  estão incluídas as tags <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code>, ou o botão de submit. Teremos que fornecê-los nós mesmos no template.</p>\n</section>\n<section id=\"the-view\">\n<span id=\"using-a-form-in-a-view\"></span><h4>A “view”<a class=\"heading-anchor\" href=\"#the-view\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Os dados de formulários enviados para um site Django são processados por uma “view”, geralmente a mesma “view” que publica o formulário. Isso nos permiti reutilizar parte da mesma lógica.</p>\n<p>Para lidar com o formulário precisamos instanciá-lo na “view” da URL onde queremos que seja publicado:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>views.py</code></figcaption><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"views.py\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponseRedirect</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.shortcuts</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">render</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">NameForm</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_name</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"c1\"># if this is a POST request we need to process the form data</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"c1\"># create a form instance and populate it with data from the request:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">NameForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n        <span class=\"c1\"># check whether it&#39;s valid:</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"c1\"># process the data in form.cleaned_data as required</span>\n            <span class=\"c1\"># ...</span>\n            <span class=\"c1\"># redirect to a new URL:</span>\n            <span class=\"k\">return</span> <span class=\"n\">HttpResponseRedirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;/thanks/&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># if a GET (or any other method) we&#39;ll create a blank form</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">NameForm</span><span class=\"p\">()</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;name.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">})</span>\n</code></pre></figure>\n<p>Se chegarmos a essa “view” com uma requisição do tipo <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code>, ela irá criar uma instância vazia de formulário e colocá-lo no “context” do template para renderizá-lo. Isso é o que esperamos que aconteça quando visitarmos a URL pela primeira vez.</p>\n<p>Se o formulário for submetido usando uma requisição do tipo <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code>, a “view” irá mais uma vez criar uma instância do formulário e preenchê-la com dados vindos da requisição <code class=\"docutils literal notranslate\"><span class=\"pre\">form</span> <span class=\"pre\">=</span> <span class=\"pre\">NameForm(request.POST)</span></code>. Isso é chamado “carregar dados no formulário” (ele é agora um  “<em>bound</em> form”).</p>\n<p>Chamamos o método <code class=\"docutils literal notranslate\"><span class=\"pre\">is_valid()``do</span> <span class=\"pre\">formulário;</span> <span class=\"pre\">se</span> <span class=\"pre\">não</span> <span class=\"pre\">é</span> <span class=\"pre\">``True</span></code>, nós retornamos ao template com o formulário. Desta vez o formulário não está mais vazio (<em>unbound</em>) então o formulário HTML será preenchido com os dados previamente submetidos, onde podem ser editados e corrigidos quando necessário.</p>\n<p>Se <code class=\"docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code> é <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, seremos capazes de encontrar todos os dados do formulário no atributo <code class=\"docutils literal notranslate\"><span class=\"pre\">cleaned_data</span></code>. Podemos usar estes dados para atualizar o banco de dados ou fazer outro processamento antes de enviar um redirecionamento HTTP para o navegador dizendo onde ir a seguir.</p>\n</section>\n<section id=\"the-template\">\n<span id=\"topics-forms-index-basic-form-template\"></span><h4>O template<a class=\"heading-anchor\" href=\"#the-template\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Nós não precisamos fazer muito no nosso template <code class=\"docutils literal notranslate\"><span class=\"pre\">name.html</span></code>. O exemplo mais simples é:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">form</span> <span class=\"na\">action</span><span class=\"o\">=</span><span class=\"s\">&quot;/your-name/&quot;</span> <span class=\"na\">method</span><span class=\"o\">=</span><span class=\"s\">&quot;post&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">csrf_token</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;submit&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;Submit&quot;</span> <span class=\"p\">/&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">form</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Todos os campos dos formulário e seus atributos serão desempacotados dentro da marcação HTML vindos do <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form</span> <span class=\"pre\">}}</span></code> através da linguagem de templates do Django.</p>\n<aside class=\"admonition-forms-and-cross-site-request-forgery-protection admonition\">\n<p class=\"admonition-title\">Formulários e a proteção contra “Falsificação de solicitação entre sites”</p>\n<p>O Django traz uma <a class=\"reference internal\" href=\"/pt-br/2.0/ref/csrf/\"><span class=\"doc\">proteção contra falsificação de solicitação entre sites (CSRF em Inglês)</span></a>. Quando se submete um formulário através de um <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> com a proteção CSRF habilitada você deve usar a template tag <a class=\"reference internal\" href=\"/pt-br/2.0/ref/templates/builtins/#std-templatetag-csrf_token\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">csrf_token</span></code></a> como no exemplo anterior. Porém, uma vez que a proteção CSRF não está diretamente ligada a formulários em templates, essa tag é omitida dos próximos exemplos neste documento.</p>\n</aside>\n<aside class=\"admonition-html5-input-types-and-browser-validation admonition\">\n<p class=\"admonition-title\">Tipos de entradas HTML5 e validação do navegador</p>\n<p>Se o seu formulário inclui uma <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/fields/#django.forms.URLField\" title=\"django.forms.URLField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">URLField</span></code></a>, um <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/fields/#django.forms.EmailField\" title=\"django.forms.EmailField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">EmailField</span></code></a> ou qualquer tipo de campo do tipo inteiro, o Django irá usar o tipos de entradas HTML5 <code class=\"docutils literal notranslate\"><span class=\"pre\">url</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">email</span></code> e <code class=\"docutils literal notranslate\"><span class=\"pre\">number</span></code>. Por padrão, os navegadores web podem aplicar suas próprias validações nestes campos, as quais podem ser mais rigorosas do que a validação do Django. Se você quiser desabilitar este comportamento, defina o atributo novalidate na tag do <code class=\"docutils literal notranslate\"><span class=\"pre\">form</span></code>, ou especifique um “widget” diferente para o campo, como uma <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextInput</span></code></a>.</p>\n</aside>\n<p>Nós agora temos um formulário web funcional, descrito pela <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> do Django, processado pela “view”, e renderizado como um <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code> HTML.</p>\n<p>Isso é tudo o que você precisa para iniciar, mas o framework de formulários lhe dá muito mais. Uma vez que tenha entendido o básico dos processos descritos acima, você deve estar preparado para entender outras características do sistema de formulários e pronto par aprender um pouco mais sobre maquinário por de trás disso.</p>\n</section>\n</section>\n</section>\n<section id=\"more-about-django-form-classes\">\n<h2>Mais sobre as classes de <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> do Django<a class=\"heading-anchor\" href=\"#more-about-django-form-classes\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>All form classes are created as subclasses of either <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.forms.Form</span></code></a>\nor <a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.forms.ModelForm</span></code></a>. You can think of <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> as a\nsubclass of <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code>. <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> actually inherit common\nfunctionality from a (private) <code class=\"docutils literal notranslate\"><span class=\"pre\">BaseForm</span></code> class, but this implementation\ndetail is rarely important.</p>\n<aside class=\"admonition-models-and-forms admonition\">\n<p class=\"admonition-title\">Modelos e Formulários</p>\n<p>In fact if your form is going to be used to directly add or edit a Django\nmodel, a <a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/modelforms/\"><span class=\"doc\">ModelForm</span></a> can save you a great\ndeal of time, effort, and code, because it will build a form, along with the\nappropriate fields and their attributes, from a <code class=\"docutils literal notranslate\"><span class=\"pre\">Model</span></code> class.</p>\n</aside>\n<section id=\"bound-and-unbound-form-instances\">\n<h3>Bound and unbound form instances<a class=\"heading-anchor\" href=\"#bound-and-unbound-form-instances\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The distinction between <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#ref-forms-api-bound-unbound\"><span class=\"std std-ref\">Bound and unbound forms</span></a> is important:</p>\n<ul class=\"simple\">\n<li><p>An unbound form has no data associated with it. When rendered to the user,\nit will be empty or will contain default values.</p></li>\n<li><p>A bound form has submitted data, and hence can be used to tell if that data\nis valid. If an invalid bound form is rendered, it can include inline error\nmessages telling the user what data to correct.</p></li>\n</ul>\n<p>The form’s <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#django.forms.Form.is_bound\" title=\"django.forms.Form.is_bound\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">is_bound</span></code></a> attribute will tell you whether a form has\ndata bound to it or not.</p>\n</section>\n<section id=\"more-on-fields\">\n<h3>More on fields<a class=\"heading-anchor\" href=\"#more-on-fields\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Consider a more useful form than our minimal example above, which we could use\nto implement “contact me” functionality on a personal website:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>forms.py</code></figcaption><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"forms.py\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">subject</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">widget</span><span class=\"o\">=</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Textarea</span><span class=\"p\">)</span>\n    <span class=\"n\">sender</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">EmailField</span><span class=\"p\">()</span>\n    <span class=\"n\">cc_myself</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">required</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>Our earlier form used a single field, <code class=\"docutils literal notranslate\"><span class=\"pre\">your_name</span></code>, a <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/fields/#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a>. In\nthis case, our form has four fields: <code class=\"docutils literal notranslate\"><span class=\"pre\">subject</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">message</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code> and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">cc_myself</span></code>. <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/fields/#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a>, <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/fields/#django.forms.EmailField\" title=\"django.forms.EmailField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">EmailField</span></code></a> and\n<a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/fields/#django.forms.BooleanField\" title=\"django.forms.BooleanField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BooleanField</span></code></a> are just three of the available field types; a full list\ncan be found in <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/fields/\"><span class=\"doc\">Form fields</span></a>.</p>\n<section id=\"widgets\">\n<h4>Widgets<a class=\"heading-anchor\" href=\"#widgets\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Each form field has a corresponding <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/widgets/\"><span class=\"doc\">Widget class</span></a>,\nwhich in turn corresponds to an HTML form widget such as <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span>\n<span class=\"pre\">type=&quot;text&quot;&gt;</span></code>.</p>\n<p>In most cases, the field will have a sensible default widget. For example, by\ndefault, a <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/fields/#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a> will have a <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextInput</span></code></a> widget, that\nproduces an <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;text&quot;&gt;</span></code> in the HTML. If you needed <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;textarea&gt;</span></code>\ninstead, you’d specify the appropriate widget when defining your form field,\nas we have done for the <code class=\"docutils literal notranslate\"><span class=\"pre\">message</span></code> field.</p>\n</section>\n<section id=\"field-data\">\n<h4>Dados do campo<a class=\"heading-anchor\" href=\"#field-data\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Whatever the data submitted with a form, once it has been successfully\nvalidated by calling <code class=\"docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code> (and <code class=\"docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code> has returned <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>),\nthe validated form data will be in the <code class=\"docutils literal notranslate\"><span class=\"pre\">form.cleaned_data</span></code> dictionary. This\ndata will have been nicely converted into Python types for you.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>You can still access the unvalidated data directly from <code class=\"docutils literal notranslate\"><span class=\"pre\">request.POST</span></code> at\nthis point, but the validated data is better.</p>\n</aside>\n<p>In the contact form example above, <code class=\"docutils literal notranslate\"><span class=\"pre\">cc_myself</span></code> will be a boolean value.\nLikewise, fields such as <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/fields/#django.forms.IntegerField\" title=\"django.forms.IntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">IntegerField</span></code></a> and <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/fields/#django.forms.FloatField\" title=\"django.forms.FloatField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FloatField</span></code></a> convert\nvalues to a Python <code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code> respectively.</p>\n<p>Here’s how the form data could be processed in the view that handles this form:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>views.py</code></figcaption><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"views.py\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.mail</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">send_mail</span>\n\n<span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n    <span class=\"n\">subject</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">]</span>\n    <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;message&#39;</span><span class=\"p\">]</span>\n    <span class=\"n\">sender</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;sender&#39;</span><span class=\"p\">]</span>\n    <span class=\"n\">cc_myself</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;cc_myself&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"n\">recipients</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;info@example.com&#39;</span><span class=\"p\">]</span>\n    <span class=\"k\">if</span> <span class=\"n\">cc_myself</span><span class=\"p\">:</span>\n        <span class=\"n\">recipients</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">sender</span><span class=\"p\">)</span>\n\n    <span class=\"n\">send_mail</span><span class=\"p\">(</span><span class=\"n\">subject</span><span class=\"p\">,</span> <span class=\"n\">message</span><span class=\"p\">,</span> <span class=\"n\">sender</span><span class=\"p\">,</span> <span class=\"n\">recipients</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponseRedirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;/thanks/&#39;</span><span class=\"p\">)</span>\n</code></pre></figure>\n<aside class=\"admonition admonition-tip\">\n<p class=\"admonition-title\">Dica</p>\n<p>For more on sending email from Django, see <a class=\"reference internal\" href=\"/pt-br/2.0/topics/email/\"><span class=\"doc\">Enviando e-mail</span></a>.</p>\n</aside>\n<p>Some field types need some extra handling. For example, files that are uploaded\nusing a form need to be handled differently (they can be retrieved from\n<code class=\"docutils literal notranslate\"><span class=\"pre\">request.FILES</span></code>, rather than <code class=\"docutils literal notranslate\"><span class=\"pre\">request.POST</span></code>). For details of how to handle\nfile uploads with your form, see <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#binding-uploaded-files\"><span class=\"std std-ref\">Binding uploaded files to a form</span></a>.</p>\n</section>\n</section>\n</section>\n<section id=\"working-with-form-templates\">\n<h2>Working with form templates<a class=\"heading-anchor\" href=\"#working-with-form-templates\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>All you need to do to get your form into a template is to place the form\ninstance into the template context. So if your form is called <code class=\"docutils literal notranslate\"><span class=\"pre\">form</span></code> in the\ncontext, <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form</span> <span class=\"pre\">}}</span></code> will render its <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> elements\nappropriately.</p>\n<section id=\"form-rendering-options\">\n<h3>Form rendering options<a class=\"heading-anchor\" href=\"#form-rendering-options\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"admonition-additional-form-template-furniture admonition\">\n<p class=\"admonition-title\">Additional form template furniture</p>\n<p>Don’t forget that a form’s output does <em>not</em> include the surrounding\n<code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code> tags, or the form’s <code class=\"docutils literal notranslate\"><span class=\"pre\">submit</span></code> control. You will have to provide\nthese yourself.</p>\n</aside>\n<p>There are other output options though for the <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code>/<code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> pairs:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.as_table</span> <span class=\"pre\">}}</span></code> will render them as table cells wrapped in <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;tr&gt;</span></code>\ntags</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.as_p</span> <span class=\"pre\">}}</span></code> will render them wrapped in <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;p&gt;</span></code> tags</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.as_ul</span> <span class=\"pre\">}}</span></code> will render them wrapped in <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;li&gt;</span></code> tags</p></li>\n</ul>\n<p>Note that you’ll have to provide the surrounding <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;table&gt;</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;ul&gt;</span></code>\nelements yourself.</p>\n<p>Here’s the output of <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.as_p</span> <span class=\"pre\">}}</span></code> for our <code class=\"docutils literal notranslate\"><span class=\"pre\">ContactForm</span></code> instance:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_subject&quot;</span><span class=\"p\">&gt;</span>Subject:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_subject&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;text&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;subject&quot;</span> <span class=\"na\">maxlength</span><span class=\"o\">=</span><span class=\"s\">&quot;100&quot;</span> <span class=\"na\">required</span> <span class=\"p\">/&gt;&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_message&quot;</span><span class=\"p\">&gt;</span>Message:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">textarea</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;message&quot;</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_message&quot;</span> <span class=\"na\">required</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">textarea</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_sender&quot;</span><span class=\"p\">&gt;</span>Sender:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;email&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;sender&quot;</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_sender&quot;</span> <span class=\"na\">required</span> <span class=\"p\">/&gt;&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_cc_myself&quot;</span><span class=\"p\">&gt;</span>Cc myself:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;checkbox&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;cc_myself&quot;</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_cc_myself&quot;</span> <span class=\"p\">/&gt;&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Note that each form field has an ID attribute set to <code class=\"docutils literal notranslate\"><span class=\"pre\">id_&lt;field-name&gt;</span></code>, which\nis referenced by the accompanying label tag. This is important in ensuring that\nforms are accessible to assistive technology such as screen reader software.\nYou can also <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#ref-forms-api-configuring-label\"><span class=\"std std-ref\">customize the way in which labels and ids are generated</span></a>.</p>\n<p>See <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#ref-forms-api-outputting-html\"><span class=\"std std-ref\">Outputting forms as HTML</span></a> for more on this.</p>\n</section>\n<section id=\"rendering-fields-manually\">\n<h3>Rendering fields manually<a class=\"heading-anchor\" href=\"#rendering-fields-manually\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>We don’t have to let Django unpack the form’s fields; we can do it manually if\nwe like (allowing us to reorder the fields, for example). Each field is\navailable as an attribute of the form using <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.name_of_field</span> <span class=\"pre\">}}</span></code>, and\nin a Django template, will be rendered appropriately. For example:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{{</span> <span class=\"nv\">form.non_field_errors</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.subject.errors</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.subject.id_for_label</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>Email subject:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.subject</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.message.errors</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.message.id_for_label</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>Your message:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.message</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.sender.errors</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.sender.id_for_label</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>Your email address:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.sender</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.cc_myself.errors</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.cc_myself.id_for_label</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>CC yourself?<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.cc_myself</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Complete <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> elements can also be generated using the\n<a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#django.forms.BoundField.label_tag\" title=\"django.forms.BoundField.label_tag\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">label_tag()</span></code></a>. For example:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.subject.errors</span> <span class=\"cp\">}}</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.subject.label_tag</span> <span class=\"cp\">}}</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.subject</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<section id=\"rendering-form-error-messages\">\n<h4>Rendering form error messages<a class=\"heading-anchor\" href=\"#rendering-form-error-messages\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Of course, the price of this flexibility is more work. Until now we haven’t had\nto worry about how to display form errors, because that’s taken care of for us.\nIn this example we have had to make sure we take care of any errors for each\nfield and any errors for the form as a whole. Note <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.non_field_errors</span>\n<span class=\"pre\">}}</span></code> at the top of the form and the template lookup for errors on each field.</p>\n<p>Using <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.name_of_field.errors</span> <span class=\"pre\">}}</span></code> displays a list of form errors,\nrendered as an unordered list. This might look like:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">ul</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;errorlist&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>Sender is required.<span class=\"p\">&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>The list has a CSS class of <code class=\"docutils literal notranslate\"><span class=\"pre\">errorlist</span></code> to allow you to style its appearance.\nIf you wish to further customize the display of errors you can do so by looping\nover them:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">form.subject.errors</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">ol</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">error</span> <span class=\"k\">in</span> <span class=\"nv\">form.subject.errors</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">strong</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">error</span><span class=\"o\">|</span><span class=\"nf\">escape</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">strong</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">ol</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Non-field errors (and/or hidden field errors that are rendered at the top of\nthe form when using helpers like <code class=\"docutils literal notranslate\"><span class=\"pre\">form.as_p()</span></code>) will be rendered with an\nadditional class of <code class=\"docutils literal notranslate\"><span class=\"pre\">nonfield</span></code> to help distinguish them from field-specific\nerrors. For example, <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.non_field_errors</span> <span class=\"pre\">}}</span></code> would look like:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">ul</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;errorlist nonfield&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>Generic validation error<span class=\"p\">&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>See <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/\"><span class=\"doc\">The Forms API</span></a> for more on errors, styling, and working with form\nattributes in templates.</p>\n</section>\n</section>\n<section id=\"looping-over-the-form-s-fields\">\n<h3>Looping over the form’s fields<a class=\"heading-anchor\" href=\"#looping-over-the-form-s-fields\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>If you’re using the same HTML for each of your form fields, you can reduce\nduplicate code by looping through each field in turn using a <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">for</span> <span class=\"pre\">%}</span></code>\nloop:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">field</span> <span class=\"k\">in</span> <span class=\"nv\">form</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.errors</span> <span class=\"cp\">}}</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.label_tag</span> <span class=\"cp\">}}</span> <span class=\"cp\">{{</span> <span class=\"nv\">field</span> <span class=\"cp\">}}</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">field.help_text</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">p</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;help&quot;</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">field.help_text</span><span class=\"o\">|</span><span class=\"nf\">safe</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Useful attributes on <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field</span> <span class=\"pre\">}}</span></code> include:</p>\n<dl>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.label</span> <span class=\"pre\">}}</span></code></dt><dd><p>The label of the field, e.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">Email</span> <span class=\"pre\">address</span></code>.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.label_tag</span> <span class=\"pre\">}}</span></code></dt><dd><p>The field’s label wrapped in the appropriate HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> tag. This\nincludes the form’s <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#django.forms.Form.label_suffix\" title=\"django.forms.Form.label_suffix\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">label_suffix</span></code></a>. For example,\nthe default <code class=\"docutils literal notranslate\"><span class=\"pre\">label_suffix</span></code> is a colon:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"o\">&lt;</span><span class=\"n\">label</span> <span class=\"k\">for</span><span class=\"o\">=</span><span class=\"s2\">&quot;id_email&quot;</span><span class=\"o\">&gt;</span><span class=\"n\">Email</span> <span class=\"n\">address</span><span class=\"p\">:</span><span class=\"o\">&lt;/</span><span class=\"n\">label</span><span class=\"o\">&gt;</span>\n</code></pre></div>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.id_for_label</span> <span class=\"pre\">}}</span></code></dt><dd><p>The ID that will be used for this field (<code class=\"docutils literal notranslate\"><span class=\"pre\">id_email</span></code> in the example\nabove). If you are constructing the label manually, you may want to use\nthis in lieu of <code class=\"docutils literal notranslate\"><span class=\"pre\">label_tag</span></code>. It’s also useful, for example, if you have\nsome inline JavaScript and want to avoid hardcoding the field’s ID.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.value</span> <span class=\"pre\">}}</span></code></dt><dd><p>The value of the field. e.g <code class=\"docutils literal notranslate\"><span class=\"pre\">someone&#64;example.com</span></code>.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.html_name</span> <span class=\"pre\">}}</span></code></dt><dd><p>The name of the field that will be used in the input element’s name\nfield. This takes the form prefix into account, if it has been set.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.help_text</span> <span class=\"pre\">}}</span></code></dt><dd><p>Any help text that has been associated with the field.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.errors</span> <span class=\"pre\">}}</span></code></dt><dd><p>Outputs a <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;ul</span> <span class=\"pre\">class=&quot;errorlist&quot;&gt;</span></code> containing any validation errors\ncorresponding to this field. You can customize the presentation of\nthe errors with a <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">for</span> <span class=\"pre\">error</span> <span class=\"pre\">in</span> <span class=\"pre\">field.errors</span> <span class=\"pre\">%}</span></code> loop. In this\ncase, each object in the loop is a simple string containing the error\nmessage.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.is_hidden</span> <span class=\"pre\">}}</span></code></dt><dd><p>This attribute is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> if the form field is a hidden field and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> otherwise. It’s not particularly useful as a template\nvariable, but could be useful in conditional tests such as:</p>\n</dd>\n</dl>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">field.is_hidden</span> <span class=\"cp\">%}</span>\n   <span class=\"c\">{# Do something special #}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.field</span> <span class=\"pre\">}}</span></code></dt><dd><p>The <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/fields/#django.forms.Field\" title=\"django.forms.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a> instance from the form class that\nthis <a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#django.forms.BoundField\" title=\"django.forms.BoundField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BoundField</span></code></a> wraps. You can use it to access\n<a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/fields/#django.forms.Field\" title=\"django.forms.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a> attributes, e.g.\n<code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">char_field.field.max_length</span> <span class=\"pre\">}}</span></code>.</p>\n</dd>\n</dl>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Ver também</p>\n<p>For a complete list of attributes and methods, see\n<a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/api/#django.forms.BoundField\" title=\"django.forms.BoundField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BoundField</span></code></a>.</p>\n</aside>\n<section id=\"looping-over-hidden-and-visible-fields\">\n<h4>Looping over hidden and visible fields<a class=\"heading-anchor\" href=\"#looping-over-hidden-and-visible-fields\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>If you’re manually laying out a form in a template, as opposed to relying on\nDjango’s default form layout, you might want to treat <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;hidden&quot;&gt;</span></code>\nfields differently from non-hidden fields. For example, because hidden fields\ndon’t display anything, putting error messages “next to” the field could cause\nconfusion for your users – so errors for those fields should be handled\ndifferently.</p>\n<p>Django provides two methods on a form that allow you to loop over the hidden\nand visible fields independently: <code class=\"docutils literal notranslate\"><span class=\"pre\">hidden_fields()</span></code> and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">visible_fields()</span></code>. Here’s a modification of an earlier example that uses\nthese two methods:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"c\">{# Include the hidden fields #}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">hidden</span> <span class=\"k\">in</span> <span class=\"nv\">form.hidden_fields</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{{</span> <span class=\"nv\">hidden</span> <span class=\"cp\">}}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"c\">{# Include the visible fields #}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">field</span> <span class=\"k\">in</span> <span class=\"nv\">form.visible_fields</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.errors</span> <span class=\"cp\">}}</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.label_tag</span> <span class=\"cp\">}}</span> <span class=\"cp\">{{</span> <span class=\"nv\">field</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>This example does not handle any errors in the hidden fields. Usually, an\nerror in a hidden field is a sign of form tampering, since normal form\ninteraction won’t alter them. However, you could easily insert some error\ndisplays for those form errors, as well.</p>\n</section>\n</section>\n<section id=\"reusable-form-templates\">\n<h3>Reusable form templates<a class=\"heading-anchor\" href=\"#reusable-form-templates\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>If your site uses the same rendering logic for forms in multiple places, you\ncan reduce duplication by saving the form’s loop in a standalone template and\nusing the <a class=\"reference internal\" href=\"/pt-br/2.0/ref/templates/builtins/#std-templatetag-include\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">include</span></code></a> tag to reuse it in other templates:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code># In your form template:\n<span class=\"cp\">{%</span> <span class=\"k\">include</span> <span class=\"s2\">&quot;form_snippet.html&quot;</span> <span class=\"cp\">%}</span>\n\n# In form_snippet.html:\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">field</span> <span class=\"k\">in</span> <span class=\"nv\">form</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.errors</span> <span class=\"cp\">}}</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.label_tag</span> <span class=\"cp\">}}</span> <span class=\"cp\">{{</span> <span class=\"nv\">field</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>If the form object passed to a template has a different name within the\ncontext, you can alias it using the <code class=\"docutils literal notranslate\"><span class=\"pre\">with</span></code> argument of the <a class=\"reference internal\" href=\"/pt-br/2.0/ref/templates/builtins/#std-templatetag-include\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">include</span></code></a>\ntag:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">include</span> <span class=\"s2\">&quot;form_snippet.html&quot;</span> <span class=\"k\">with</span> <span class=\"nv\">form</span><span class=\"o\">=</span><span class=\"nv\">comment_form</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>If you find yourself doing this often, you might consider creating a custom\n<a class=\"reference internal\" href=\"/pt-br/2.0/howto/custom-template-tags/#howto-custom-template-tags-inclusion-tags\"><span class=\"std std-ref\">inclusion tag</span></a>.</p>\n</section>\n</section>\n<section id=\"further-topics\">\n<h2>Further topics<a class=\"heading-anchor\" href=\"#further-topics\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>This covers the basics, but forms can do a whole lot more:</p>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/formsets/\">Formsets</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/formsets/#using-initial-data-with-a-formset\">Using initial data with a formset</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/formsets/#limiting-the-maximum-number-of-forms\">Limiting the maximum number of forms</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/formsets/#formset-validation\">Formset validation</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/formsets/#validating-the-number-of-forms-in-a-formset\">Validating the number of forms in a formset</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/formsets/#dealing-with-ordering-and-deletion-of-forms\">Dealing with ordering and deletion of forms</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/formsets/#adding-additional-fields-to-a-formset\">Adding additional fields to a formset</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/formsets/#passing-custom-parameters-to-formset-forms\">Passing custom parameters to formset forms</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/formsets/#customizing-a-formset-s-prefix\">Customizing a formset’s prefix</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/formsets/#using-a-formset-in-views-and-templates\">Using a formset in views and templates</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/modelforms/\">Creating forms from models</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/modelforms/#modelform\"><code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/modelforms/#model-formsets\">Model formsets</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/modelforms/#inline-formsets\">Inline formsets</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/media/\">Form Assets (the <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> class)</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/media/#assets-as-a-static-definition\">Assets as a static definition</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/media/#media-as-a-dynamic-property\"><code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> as a dynamic property</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/media/#paths-in-asset-definitions\">Paths in asset definitions</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/media/#media-objects\">Objetos de <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/pt-br/2.0/topics/forms/media/#media-on-forms\"><code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> on Forms</a></li>\n</ul>\n</li>\n</ul>\n</div>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Ver também</p>\n<dl class=\"simple\">\n<dt><a class=\"reference internal\" href=\"/pt-br/2.0/ref/forms/\"><span class=\"doc\">The Forms Reference</span></a></dt><dd><p>Covers the full API reference, including form fields, form widgets,\nand form and field validation.</p>\n</dd>\n</dl>\n</aside>\n</section>","rootId":"working-with-forms","toc":[{"title":"Formulários HTML","anchor":"html-forms","children":[{"title":"GET e POST","anchor":"get-and-post","children":[]}]},{"title":"Regras do Django em formulários","anchor":"django-s-role-in-forms","children":[]},{"title":"Formulários no Django","anchor":"forms-in-django","children":[{"title":"A classe Form do Django","anchor":"the-django-form-class","children":[]},{"title":"Instanciando, processando, e renderizando formulários","anchor":"instantiating-processing-and-rendering-forms","children":[]}]},{"title":"Construindo um formulário","anchor":"building-a-form","children":[{"title":"O trabalho que tem que ser feito","anchor":"the-work-that-needs-to-be-done","children":[]},{"title":"Construindo um formulário no Django","anchor":"building-a-form-in-django","children":[{"title":"A classe Form","anchor":"the-form-class","children":[]},{"title":"A “view”","anchor":"the-view","children":[]},{"title":"O template","anchor":"the-template","children":[]}]}]},{"title":"Mais sobre as classes de Form do Django","anchor":"more-about-django-form-classes","children":[{"title":"Bound and unbound form instances","anchor":"bound-and-unbound-form-instances","children":[]},{"title":"More on fields","anchor":"more-on-fields","children":[{"title":"Widgets","anchor":"widgets","children":[]},{"title":"Dados do campo","anchor":"field-data","children":[]}]}]},{"title":"Working with form templates","anchor":"working-with-form-templates","children":[{"title":"Form rendering options","anchor":"form-rendering-options","children":[]},{"title":"Rendering fields manually","anchor":"rendering-fields-manually","children":[{"title":"Rendering form error messages","anchor":"rendering-form-error-messages","children":[]}]},{"title":"Looping over the form’s fields","anchor":"looping-over-the-form-s-fields","children":[{"title":"Looping over hidden and visible fields","anchor":"looping-over-hidden-and-visible-fields","children":[]}]},{"title":"Reusable form templates","anchor":"reusable-form-templates","children":[]}]},{"title":"Further topics","anchor":"further-topics","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Usando o Django","url":"/pt-br/2.0/topics/"}],"prev":{"docname":"topics/http/sessions","title":"How to use sessions","url":"/pt-br/2.0/topics/http/sessions/"},"next":{"docname":"topics/forms/formsets","title":"Formsets","url":"/pt-br/2.0/topics/forms/formsets/"},"formats":{"html":"/pt-br/2.0/topics/forms/","markdown":"/pt-br/2.0/topics/forms.md","json":"/pt-br/2.0/topics/forms.json"},"source":"https://github.com/django/django/blob/stable/2.0.x/docs/topics/forms/index.txt","official":"https://docs.djangoproject.com/pt-br/2.0/topics/forms/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}