{"title":"Bekerja dengan formulir","version":"3.2","locale":"id","docname":"topics/forms/index","url":"/id/3.2/topics/forms/","canonical":"https://djangodocs.dev/id/3.2/topics/forms/","summary":"Tentang dokumen ini This document provides an introduction to the basics of web forms and how they are handled in Django. For a more detailed look at specific areas…","html":"<h1>Bekerja dengan formulir<a class=\"heading-anchor\" href=\"#working-with-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<aside class=\"admonition-about-this-document admonition\">\n<p class=\"admonition-title\">Tentang dokumen ini</p>\n<p>This document provides an introduction to the basics of web forms and how\nthey are handled in Django. For a more detailed look at specific areas of\nthe forms API, see <a class=\"reference internal\" href=\"/id/3.2/ref/forms/api/\"><span class=\"doc\">API Formulir</span></a>, <a class=\"reference internal\" href=\"/id/3.2/ref/forms/fields/\"><span class=\"doc\">Bidang formulir</span></a>, and\n<a class=\"reference internal\" href=\"/id/3.2/ref/forms/validation/\"><span class=\"doc\">Pengesahan formulir dan bidang</span></a>.</p>\n</aside>\n<p>Unless you're planning to build websites and applications that do nothing but\npublish content, and don't accept input from your visitors, you're going to\nneed to understand and use forms.</p>\n<p>Django provides a range of tools and libraries to help you build forms to\naccept input from site visitors, and then process and respond to the input.</p>\n<section id=\"html-forms\">\n<h2>Formulir HTML<a class=\"heading-anchor\" href=\"#html-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>In HTML, a form is a collection of elements inside <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;...&lt;/form&gt;</span></code> that\nallow a visitor to do things like enter text, select options, manipulate\nobjects or controls, and so on, and then send that information back to the\nserver.</p>\n<p>Some of these form interface elements - text input or checkboxes - are built\ninto HTML itself. Others are much more complex; an interface that pops up a\ndate picker or allows you to move a slider or manipulate controls will\ntypically use JavaScript and CSS as well as HTML form <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> elements to\nachieve these effects.</p>\n<p>Sama halnya dengan unsur <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code>, sebuah formulir harus menentukan dua hal:</p>\n<ul class=\"simple\">\n<li><p><em>dimana</em> URL dimana data sesuai ke masukan pengguna harus kembali</p></li>\n<li><p><em>bagaimana</em>: Metode HTTP data harus kembali</p></li>\n</ul>\n<p>As an example, the login form for the Django admin contains several\n<code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> elements: one of <code class=\"docutils literal notranslate\"><span class=\"pre\">type=&quot;text&quot;</span></code> for the username, one of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">type=&quot;password&quot;</span></code> for the password, and one of <code class=\"docutils literal notranslate\"><span class=\"pre\">type=&quot;submit&quot;</span></code> for the\n&quot;Log in&quot; button. It also contains some hidden text fields that the user\ndoesn't see, which Django uses to determine what to do next.</p>\n<p>It also tells the browser that the form data should be sent to the URL\nspecified in the <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code>’s <code class=\"docutils literal notranslate\"><span class=\"pre\">action</span></code> attribute - <code class=\"docutils literal notranslate\"><span class=\"pre\">/admin/</span></code> - and that it\nshould be sent using the HTTP mechanism specified by the <code class=\"docutils literal notranslate\"><span class=\"pre\">method</span></code> attribute -\n<code class=\"docutils literal notranslate\"><span class=\"pre\">post</span></code>.</p>\n<p>Ketika unsur <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> dipicu, data dikembalikan ke <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> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code><a class=\"heading-anchor\" href=\"#get-and-post\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> adalah hanya cara HTTP digunakan untuk berhubungan dengan formulir.</p>\n<p>Django's login form is returned using the <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> method, in which the browser\nbundles up the form data, encodes it for transmission, sends it to the server,\nand then receives back its response.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code>, by contrast, bundles the submitted data into a string, and uses this\nto compose a URL. The URL contains the address where the data must be sent, as\nwell as the data keys and values. You can see this in action if you do a search\nin the Django documentation, which will produce a URL of the form\n<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> and <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> adalah khususnya digunakan untuk tujuan berbeda.</p>\n<p>Any request that could be used to change the state of the system - for example,\na request that makes changes in the database - should use <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code>. <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code>\nshould be used only for requests that do not affect the state of the system.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> would also be unsuitable for a password form, because the password\nwould appear in the URL, and thus, also in browser history and server logs,\nall in plain text. Neither would it be suitable for large quantities of data,\nor for binary data, such as an image. A Web application that uses <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code>\nrequests for admin forms is a security risk: it can be easy for an attacker to\nmimic a form's request to gain access to sensitive parts of the system.\n<code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code>, coupled with other protections like Django's <a class=\"reference internal\" href=\"/id/3.2/ref/csrf/\"><span class=\"doc\">CSRF protection</span></a> offers more control over access.</p>\n<p>On the other hand, <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> is suitable for things like a web search form,\nbecause the URLs that represent a <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> request can easily be bookmarked,\nshared, or resubmitted.</p>\n</section>\n</section>\n<section id=\"django-s-role-in-forms\">\n<h2>Peran Django di formulir<a class=\"heading-anchor\" href=\"#django-s-role-in-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Handling forms is a complex business. Consider Django's admin, where numerous\nitems of data of several different types may need to be prepared for display in\na form, rendered as HTML, edited using a convenient interface, returned to the\nserver, validated and cleaned up, and then saved or passed on for further\nprocessing.</p>\n<p>Django's form functionality can simplify and automate vast portions of this\nwork, and can also do it more securely than most programmers would be able to\ndo in code they wrote themselves.</p>\n<p>Django menangani tiga bagian berbeda dari pekerjaan melibatkan dalam formulir-formulir:</p>\n<ul class=\"simple\">\n<li><p>mempersiapkan dan menyusun kembali data untuk membuat itu untuk pengiriman</p></li>\n<li><p>membuat formulir HTML untuk data</p></li>\n<li><p>menerima dan mengolah formulir-formulir diajukan dan data dari klien</p></li>\n</ul>\n<p>Itu <em>memungkinkan</em> menulis kode yang melakukan semua ini secara manual, tetapi Django dapat merawat itu semua untuk anda.</p>\n</section>\n<section id=\"forms-in-django\">\n<h2>Formulir di Django<a class=\"heading-anchor\" href=\"#forms-in-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Kami telah menggambarkan formulir HTML dengan ringkas, tetapi sebuah HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> hanya satu bagian dari mesin yang dibutuhkan.</p>\n<p>In the context of a Web application, 'form' might refer to that HTML\n<code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code>, or to the Django <a class=\"reference internal\" href=\"/id/3.2/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> that produces it, or to the\nstructured data returned when it is submitted, or to the end-to-end working\ncollection of these parts.</p>\n<section id=\"the-django-form-class\">\n<h3>Kelas <a class=\"reference internal\" href=\"/id/3.2/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> Django<a class=\"heading-anchor\" href=\"#the-django-form-class\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>At the heart of this system of components is Django's <a class=\"reference internal\" href=\"/id/3.2/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> class. In\nmuch the same way that a Django model describes the logical structure of an\nobject, its behavior, and the way its parts are represented to us, a\n<a class=\"reference internal\" href=\"/id/3.2/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> class describes a form and determines how it works and appears.</p>\n<p>In a similar way that a model class's fields map to database fields, a form\nclass's fields map to HTML form <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> elements. (A <a class=\"reference internal\" href=\"/id/3.2/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>\nmaps a model class's fields to HTML form <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> elements via a\n<a class=\"reference internal\" href=\"/id/3.2/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>; this is what the Django admin is based upon.)</p>\n<p>A form's fields are themselves classes; they manage form data and perform\nvalidation when a form is submitted. A <a class=\"reference internal\" href=\"/id/3.2/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> and a\n<a class=\"reference internal\" href=\"/id/3.2/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> handle very different kinds of data and have to do\ndifferent things with it.</p>\n<p>A form field is represented to a user in the browser as an HTML &quot;widget&quot; - a\npiece of user interface machinery. Each field type has an appropriate default\n<a class=\"reference internal\" href=\"/id/3.2/ref/forms/widgets/\"><span class=\"doc\">Widget class</span></a>, but these can be overridden as\nrequired.</p>\n</section>\n<section id=\"instantiating-processing-and-rendering-forms\">\n<h3>Mengawali, mengolah, dan membangun formulir<a class=\"heading-anchor\" href=\"#instantiating-processing-and-rendering-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ketika membangun sebuah obyek di Django, kami umumnya:</p>\n<ol class=\"arabic simple\">\n<li><p>get hold of it in the view (fetch it from the database, for example)</p></li>\n<li><p>lewatkan ke konteks cetakan</p></li>\n<li><p>perluas itu pada markah HTML menggunakan variabel cetakan</p></li>\n</ol>\n<p>Membangun formulir dalam cetakan melibatkan hampir pekerjaan sama seperti membangun jenis lain dari obyek, tetapi ada beberapa kunci perbedaan.</p>\n<p>In the case of a model instance that contained no data, it would rarely if ever\nbe useful to do anything with it in a template. On the other hand, it makes\nperfect sense to render an unpopulated form - that's what we do when we want\nthe user to populate it.</p>\n<p>Jadi ketika kami menangani instance model dalam tampilan, kami khususnya mengambil itu dari basisdata. Ketika kami sedang berhubungan dengan seuah formulir kami khususnya menginstansiasi itu dalam tampilan.</p>\n<p>Ketika kami menginstansiasi sebuah formulir, kami dapat memilih meninggalkan itu kosong atau itu sudah-terisi, sebagai contoh dengan:</p>\n<ul class=\"simple\">\n<li><p>data dari instance model tersimpan (seperti dalam kasus dari formulir admin untuk penyuntingan).</p></li>\n<li><p>data yang kami telah kumpulkan dari sumber lain</p></li>\n<li><p>data diterima dari pengajuan formulir HTML sebelumnya</p></li>\n</ul>\n<p>Kasus terakhir ini paling menarik, karena itu memungkinkan untuk pengguna tidak hanya membaca jaringan situs, tetapi juga mengirim informasi kembali ke jaringan situs.</p>\n</section>\n</section>\n<section id=\"building-a-form\">\n<h2>Membangun formulir<a class=\"heading-anchor\" href=\"#building-a-form\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"the-work-that-needs-to-be-done\">\n<h3>Pekerjaan yang butuh diselesaikan<a class=\"heading-anchor\" href=\"#the-work-that-needs-to-be-done\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Misalnya anda ingin membuat sebuah formulir sederhana pada situs jaringan anda, untuk mendapatkan nama pengguna, anda akan butuh sesuatu seperti ini di cetakan anda:</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>Ini memberitahukan perambah untuk mengembalikan data formulir ke URL <code class=\"docutils literal notranslate\"><span class=\"pre\">/your-name/</span></code>, menggunakan cara <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code>. Dia akan menampilkan bidang teks, label &quot;Nama anda:&quot;, dan tombol ditandai &quot;OK&quot;. Jika konteks cetakan mengandung variabel <code class=\"docutils literal notranslate\"><span class=\"pre\">current_name</span></code>, yang akan digunakan untuk pra-isian bidang <code class=\"docutils literal notranslate\"><span class=\"pre\">your_name</span></code>.</p>\n<p>Anda akan butuh sebuah tampilan yang membangun cetakan mengandung formulir HTML, dan dapat mendukung bidang <code class=\"docutils literal notranslate\"><span class=\"pre\">current_name</span></code> sewajarnya.</p>\n<p>Ketika formulir diajukan, permintaan <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> yang dikirim ke peladen akan mengandung data formulir.</p>\n<p>Sekarang anda akan juga butuh sebuah tampilan sesuai ke URL <code class=\"docutils literal notranslate\"><span class=\"pre\">/your-name/</span></code> yang akan menemukan pasangan kunci/nilai yang sesuai di permintaan, dan kemudian mengolah mereka.</p>\n<p>Ini adalah formulir sangat sederhana. Dalam praktiknya, sebuah formulir mungkin mengandung lusinan atau ratusan bidang, banyak yang mungkin butuh untuk di pra-kumpulkan, dan kami mungkin mengharapkan pengguna untuk bekerja melalui lingkaran ajukan-sunting beberapa kali sebelum menutup tindakan.</p>\n<p>Kami mungkin membutuhkan beberapa pengesahan untuk muncul dalam peramban, bahkan sebelum formulir diajukan; kami mungkin ingin menggunakan bidang-bdiang lebih rumit, yang mengizinkan pengguna melakukan hal-hal seperti mengambil tanggal dari kalender dan seterusnya.</p>\n<p>Pada titik ini itu lebih mudah mendapatkan Django melakukan kebanyakan dari pekerjaan ini untuk kita.</p>\n</section>\n<section id=\"building-a-form-in-django\">\n<h3>Membangun formulir di Django<a class=\"heading-anchor\" href=\"#building-a-form-in-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"the-form-class\">\n<h4>Kelas <a class=\"reference internal\" href=\"/id/3.2/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 to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Kami sudah mengetahui apa kami inginkan formulir HTML kami terlihat seperti. Titik mulai kami untuk itu di Django adalah ini:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">forms.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><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>Ini menentukan kelas <a class=\"reference internal\" href=\"/id/3.2/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> dengan bidang tunggal (<code class=\"docutils literal notranslate\"><span class=\"pre\">your_name</span></code>). Kami telah berlakukan label ramah-manusia pada bidang, yang akan muncul dalam <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> ketika itu dibangun (meskipun dalam kasus ini, <a class=\"reference internal\" href=\"/id/3.2/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> kami tentukan sebenarnya sama satu yang akan dibangkitkan otomatis jika kami telah menghilangkan itu).</p>\n<p>Panjang masimal bidang diizinkan ditentukan oleh <a class=\"reference internal\" href=\"/id/3.2/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>. Ini melakukan dua hal. Itu menaruh <code class=\"docutils literal notranslate\"><span class=\"pre\">maxlength=&quot;100&quot;</span></code> pada HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> (jadi peramban harus mencegah pengguna dari memasuki ebih dari sejumlah karakter dalam tempat pertama). Itu juga berarti bahwa ketika Django menerima formulir kembali dari peramban, itu akan mensahkan panjang dari data.</p>\n<p>Sebuah instance <a class=\"reference internal\" href=\"/id/3.2/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> mempunyai sebuah metode <a class=\"reference internal\" href=\"/id/3.2/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>, yang menjalankan fungsi untuk semua bidang-bidangnya. Ketika metode ini dipanggil, jika semua bidang mengadnung data sah, itu akan:</p>\n<ul class=\"simple\">\n<li><p>kembali <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code></p></li>\n<li><p>tempatkan data formulir dalam atribut <a class=\"reference internal\" href=\"/id/3.2/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> nya.</p></li>\n</ul>\n<p>Formulir keseluruhan, ketika dibangun untuk pertama kali, akan kelihatan seperti:</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>Note that it <strong>does not</strong> include the <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code> tags, or a submit button.\nWe'll have to provide those ourselves in the template.</p>\n</section>\n<section id=\"the-view\">\n<span id=\"using-a-form-in-a-view\"></span><h4>Tampilan<a class=\"heading-anchor\" href=\"#the-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Form data sent back to a Django website is processed by a view, generally the\nsame view which published the form. This allows us to reuse some of the same\nlogic.</p>\n<p>To handle the form we need to instantiate it in the view for the URL where we\nwant it to be published:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">views.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><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>If we arrive at this view with a <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> request, it will create an empty form\ninstance and place it in the template context to be rendered. This is what we\ncan expect to happen the first time we visit the URL.</p>\n<p>If the form is submitted using a <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> request, the view will once again\ncreate a form instance and populate it with data from the request: <code class=\"docutils literal notranslate\"><span class=\"pre\">form</span> <span class=\"pre\">=</span>\n<span class=\"pre\">NameForm(request.POST)</span></code> This is called &quot;binding data to the form&quot; (it is now\na <em>bound</em> form).</p>\n<p>We call the form's <code class=\"docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code> method; if it's not <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, we go back to\nthe template with the form. This time the form is no longer empty (<em>unbound</em>)\nso the HTML form will be populated with the data previously submitted, where it\ncan be edited and corrected as required.</p>\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, we'll now be able to find all the validated form\ndata in its <code class=\"docutils literal notranslate\"><span class=\"pre\">cleaned_data</span></code> attribute. We can use this data to update the\ndatabase or do other processing before sending an HTTP redirect to the browser\ntelling it where to go next.</p>\n</section>\n<section id=\"the-template\">\n<span id=\"topics-forms-index-basic-form-template\"></span><h4>Cetakan<a class=\"heading-anchor\" href=\"#the-template\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Kami tidak perlu melakukan banyak dalam cetakan``name.html``kami:</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>Semua bidang formulir dan atribut mereka akan dikeluarkan kedalam markah HTML dari <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form</span> <span class=\"pre\">}}</span></code> itu dengan bahasa cetakan Django.</p>\n<aside class=\"admonition-forms-and-cross-site-request-forgery-protection admonition\">\n<p class=\"admonition-title\">Perlindungan formulir dan pemalsuan Cross Site Request</p>\n<p>Django ships with an easy-to-use <a class=\"reference internal\" href=\"/id/3.2/ref/csrf/\"><span class=\"doc\">protection against Cross Site Request\nForgeries</span></a>. When submitting a form via <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> with\nCSRF protection enabled you must use the <a class=\"reference internal\" href=\"/id/3.2/ref/templates/builtins/#std-templatetag-csrf_token\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">csrf_token</span></code></a> template tag\nas in the preceding example. However, since CSRF protection is not\ndirectly tied to forms in templates, this tag is omitted from the\nfollowing examples in this document.</p>\n</aside>\n<aside class=\"admonition-html5-input-types-and-browser-validation admonition\">\n<p class=\"admonition-title\">jenis masukan HTML5 dan pengesahan perambah</p>\n<p>If your form includes a <a class=\"reference internal\" href=\"/id/3.2/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>, an\n<a class=\"reference internal\" href=\"/id/3.2/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> or any integer field type, Django will\nuse the <code class=\"docutils literal notranslate\"><span class=\"pre\">url</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">email</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">number</span></code> HTML5 input types. By default,\nbrowsers may apply their own validation on these fields, which may be\nstricter than Django's validation. If you would like to disable this\nbehavior, set the <code class=\"docutils literal notranslate\"><span class=\"pre\">novalidate</span></code> attribute on the <code class=\"docutils literal notranslate\"><span class=\"pre\">form</span></code> tag, or specify\na different widget on the field, like <a class=\"reference internal\" href=\"/id/3.2/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>Kami sekarang memiliki formulir jaringan yang bekerja, digambarkan oleh Django <a class=\"reference internal\" href=\"/id/3.2/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>, diolah oleh tampilan, dan dibangun sebagai HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code>.</p>\n<p>That's all you need to get started, but the forms framework puts a lot more at\nyour fingertips. Once you understand the basics of the process described above,\nyou should be prepared to understand other features of the forms system and\nready to learn a bit more about the underlying machinery.</p>\n</section>\n</section>\n</section>\n<section id=\"more-about-django-form-classes\">\n<h2>Lebih tentang kelas Django <a class=\"reference internal\" href=\"/id/3.2/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=\"#more-about-django-form-classes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>All form classes are created as subclasses of either <a class=\"reference internal\" href=\"/id/3.2/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=\"/id/3.2/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\">Model dan Formulir</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=\"/id/3.2/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>Instance formulir terikat dan tidak terikat<a class=\"heading-anchor\" href=\"#bound-and-unbound-form-instances\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Perbedaan diantara <a class=\"reference internal\" href=\"/id/3.2/ref/forms/api/#ref-forms-api-bound-unbound\"><span class=\"std std-ref\">Bound and unbound forms</span></a> adalah penting:</p>\n<ul class=\"simple\">\n<li><p>Sebuah formulir tidak terikat tidak mempunyai data terkait dengan itu. Ketika dibanguk ke pengguna, itu akan kosong atau mengandung nilai awalan.</p></li>\n<li><p>Sebuah formulir ikatan telah mengajukan data, dan kemudian dapat digunakan untuk memberitahu jika data adalah sah. Jika sebuah ikatan tidak sah dibangun, itu dapat menyertakan pesan-pesan kesalahan berderet mengatakan pengguna apa yang data untuk diperbaiki.</p></li>\n</ul>\n<p>Atribut formulir <a class=\"reference internal\" href=\"/id/3.2/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> akan memberitahu anda apakah sebuah formulir mempunyai data terikat ke itu atau tidak.</p>\n</section>\n<section id=\"more-on-fields\">\n<h3>Lebih pada bidang<a class=\"heading-anchor\" href=\"#more-on-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Pertimbangkan formulir lebih berguna dari contoh minimal kami diatas, yang kami dapat gunakan untuk menerapkan kegunaan &quot;hubungi kami&quot; pada situs jaringan pribadi:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">forms.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><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=\"/id/3.2/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=\"/id/3.2/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=\"/id/3.2/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=\"/id/3.2/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=\"/id/3.2/ref/forms/fields/\"><span class=\"doc\">Bidang formulir</span></a>.</p>\n<section id=\"widgets\">\n<h4>Widget<a class=\"heading-anchor\" href=\"#widgets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Setiap bidang formulir mempunyai <span class=\"xref std std-doc\">Widget class 1</span> sesuai, yang gilirannya sesuai pada sebuah widget formulir HMTL seperti <code class=\"docutils literal notranslate\"><span class=\"pre\">2</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=\"/id/3.2/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=\"/id/3.2/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>Bidang data<a class=\"heading-anchor\" href=\"#field-data\"><span class=\"visually-hidden\">Link to this heading</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\">Catatan</p>\n<p>Anda masih dapat mengakses data tidak tersahkan langsung dari <code class=\"docutils literal notranslate\"><span class=\"pre\">request.POST</span></code> pada titik ini, tetapi data tersahkan adalah lebih baik.</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=\"/id/3.2/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=\"/id/3.2/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>Ini adalah bagaimana formulir dapat dapat diolah dalam tampilan yang menangani formulir ini:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">views.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><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\">Tip</p>\n<p>Untuk lebih pada mengirim surel dari Django, lihat <a class=\"reference internal\" href=\"/id/3.2/topics/email/\"><span class=\"doc\">Mengirim surel</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=\"/id/3.2/ref/forms/api/#binding-uploaded-files\"><span class=\"std std-ref\">Mengikat berkas terunggah ke formulir</span></a>.</p>\n</section>\n</section>\n</section>\n<section id=\"working-with-form-templates\">\n<h2>Bekerja dengan cetakan formulir<a class=\"heading-anchor\" href=\"#working-with-form-templates\"><span class=\"visually-hidden\">Link to this heading</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>Formulir pilihan pembangunan<a class=\"heading-anchor\" href=\"#form-rendering-options\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"admonition-additional-form-template-furniture admonition\">\n<p class=\"admonition-title\">Tambahan formulir cetakan mebel</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>Ada pilihan keluaran lain meskipun untuk pasangan <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code>/<code class=\"docutils literal notranslate\"><span class=\"pre\">2</span></code>:</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> akan membangun mereka sebagai sel tabel terbungkus dalam etiket <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;tr&gt;</span></code></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> akan membangun mereka terbungkus dalam etiket <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;p&gt;</span></code></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> akan membangun mereka terbungkus dalam etiket <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;li&gt;</span></code></p></li>\n</ul>\n<p>Catat bahwa anda harus menyediakan sekitarnya unsur <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> atau <code class=\"docutils literal notranslate\"><span class=\"pre\">2</span></code> anda sendiri.</p>\n<p>Ini adalah keluaran dari <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.as_p</span> <span class=\"pre\">}}</span></code> untuk instance <code class=\"docutils literal notranslate\"><span class=\"pre\">ContactForm</span></code> kami:</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=\"/id/3.2/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>Lihat <a class=\"reference internal\" href=\"/id/3.2/ref/forms/api/#ref-forms-api-outputting-html\"><span class=\"std std-ref\">Mengeluarkan formulir sebagai HTML</span></a> untuk lebih pada ini.</p>\n</section>\n<section id=\"rendering-fields-manually\">\n<h3>Membangun bidang manual<a class=\"heading-anchor\" href=\"#rendering-fields-manually\"><span class=\"visually-hidden\">Link to this heading</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=\"/id/3.2/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>Membangun formulir kesalahan pesan<a class=\"heading-anchor\" href=\"#rendering-form-error-messages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>The price of this flexibility is a bit more work. Until now we haven't had to\nworry about how to display form errors, because that's taken care of for us. In\nthis example we have had to make sure we take care of any errors for each field\nand 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> <span class=\"pre\">}}</span></code> at\nthe 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>Lihat <a class=\"reference internal\" href=\"/id/3.2/ref/forms/api/\"><span class=\"doc\">API Formulir</span></a> untuk lebih pada kesalahan, gaya, dan bekerja dengan atribut formulir dalam cetakan-cetakan.</p>\n</section>\n</section>\n<section id=\"looping-over-the-form-s-fields\">\n<h3>Memutar terhadap bidang-bidang formulir<a class=\"heading-anchor\" href=\"#looping-over-the-form-s-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Jika anda sedang menggunakan HTML sama untuk setiap bidang formulir anda, anda dapat mengurangi kode ganda dengan memutari setiap bidang bergantian menggunakan putaran <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">for</span> <span class=\"pre\">%}</span></code>:</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>Atribut berguna pada <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field</span> <span class=\"pre\">}}</span></code> termasuk:</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>Label dari bidang, sebagai contoh <code class=\"docutils literal notranslate\"><span class=\"pre\">Alamat</span> <span class=\"pre\">surel</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=\"/id/3.2/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>ID yang akan digunakan untuk bidang ini (<code class=\"docutils literal notranslate\"><span class=\"pre\">id_email</span></code> di contoh diatas). Jika anda sedang membangun label secara manual, anda mungkin ingin menggunakan ini sebagai pengganti <code class=\"docutils literal notranslate\"><span class=\"pre\">label_tag</span></code>. Itu juga sangat berguna, sebagai contoh, jika anda mempunyai beberapa JavaScript berderet dan ingin menghindari kode keras ID bidang.</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>Nilai bidang sebagai contoh <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>Teks bantuan apapun yang telah dikaitkan dengan bidang.</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 string containing the error message.</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=\"/id/3.2/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=\"/id/3.2/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=\"/id/3.2/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\">Lihat juga</p>\n<p>Untuk daftar lengkap dari atribut dan cara, lihat <a class=\"reference internal\" href=\"/id/3.2/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>Berputar terhadap bidang-bdaing sembunyi dan tampak<a class=\"heading-anchor\" href=\"#looping-over-hidden-and-visible-fields\"><span class=\"visually-hidden\">Link to this heading</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 &quot;next to&quot; 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>Formulir cetakan-cetakan dapat digunakan kembali<a class=\"heading-anchor\" href=\"#reusable-form-templates\"><span class=\"visually-hidden\">Link to this heading</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=\"/id/3.2/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=\"/id/3.2/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>Jika anda menemukan diri anda melakukan ini sering, anda mungkin mempertimbangkan membuat penyesuaian <span class=\"xref std std-ref\">inclusion tag1</span>.</p>\n</section>\n</section>\n<section id=\"further-topics\">\n<h2>Topik lebih jauh<a class=\"heading-anchor\" href=\"#further-topics\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ini mencangkup dasar, tetapi formulir dapat melakukan keseluruhan lebih banyak:</p>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/id/3.2/topics/forms/formsets/\">Formset</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/id/3.2/topics/forms/formsets/#using-initial-data-with-a-formset\">Menggunakan data awalan dengan formset</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/id/3.2/topics/forms/formsets/#limiting-the-maximum-number-of-forms\">Membatasi nomor maksimal dari formulir</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/id/3.2/topics/forms/formsets/#limiting-the-maximum-number-of-instantiated-forms\">Limiting the maximum number of instantiated forms</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/id/3.2/topics/forms/formsets/#formset-validation\">Pengesahan formset</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/id/3.2/topics/forms/formsets/#validating-the-number-of-forms-in-a-formset\">Mensahkan sejumlah formulir dalam formset</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/id/3.2/topics/forms/formsets/#dealing-with-ordering-and-deletion-of-forms\">Berurusan dengan pengurutan dan penghapusan formulir</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/id/3.2/topics/forms/formsets/#adding-additional-fields-to-a-formset\">Menambahkan bidang-bidang tambahan pada sebuah formset</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/id/3.2/topics/forms/formsets/#passing-custom-parameters-to-formset-forms\">Melewatkan parameter penyesuaian pada formulir formset</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/id/3.2/topics/forms/formsets/#customizing-a-formset-s-prefix\">Menyesuaikan awalan formset</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/id/3.2/topics/forms/formsets/#using-a-formset-in-views-and-templates\">Menggunakan sebuah formset dalam tampilan dan cetakan</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/id/3.2/topics/forms/modelforms/\">Membuat formulir dari model</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/id/3.2/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=\"/id/3.2/topics/forms/modelforms/#model-formsets\">Model formsets</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/id/3.2/topics/forms/modelforms/#inline-formsets\">Formset berderet</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/id/3.2/topics/forms/media/\">Aset Formulir (kelas <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code>)</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/id/3.2/topics/forms/media/#assets-as-a-static-definition\">Aset sebagai pengertian tetap</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/id/3.2/topics/forms/media/#media-as-a-dynamic-property\"><code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> sebagai sifat dinamis</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/id/3.2/topics/forms/media/#paths-in-asset-definitions\">Jalur dalam pengertian aset</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/id/3.2/topics/forms/media/#media-objects\">Obyek <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/id/3.2/topics/forms/media/#media-on-forms\"><code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> pada Form</a></li>\n</ul>\n</li>\n</ul>\n</div>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Lihat juga</p>\n<dl class=\"simple\">\n<dt><a class=\"reference internal\" href=\"/id/3.2/ref/forms/\"><span class=\"doc\">Acuan Formulir</span></a></dt><dd><p>Mencangkup acuan API penuh, termasuk bidang formulir, widget formulir, dan pengesahan formulir dan bidang.</p>\n</dd>\n</dl>\n</aside>\n</section>","rootId":"working-with-forms","toc":[{"title":"Formulir HTML","anchor":"html-forms","children":[{"title":"GET dan POST","anchor":"get-and-post","children":[]}]},{"title":"Peran Django di formulir","anchor":"django-s-role-in-forms","children":[]},{"title":"Formulir di Django","anchor":"forms-in-django","children":[{"title":"Kelas Form Django","anchor":"the-django-form-class","children":[]},{"title":"Mengawali, mengolah, dan membangun formulir","anchor":"instantiating-processing-and-rendering-forms","children":[]}]},{"title":"Membangun formulir","anchor":"building-a-form","children":[{"title":"Pekerjaan yang butuh diselesaikan","anchor":"the-work-that-needs-to-be-done","children":[]},{"title":"Membangun formulir di Django","anchor":"building-a-form-in-django","children":[{"title":"Kelas Form","anchor":"the-form-class","children":[]},{"title":"Tampilan","anchor":"the-view","children":[]},{"title":"Cetakan","anchor":"the-template","children":[]}]}]},{"title":"Lebih tentang kelas Django Form.","anchor":"more-about-django-form-classes","children":[{"title":"Instance formulir terikat dan tidak terikat","anchor":"bound-and-unbound-form-instances","children":[]},{"title":"Lebih pada bidang","anchor":"more-on-fields","children":[{"title":"Widget","anchor":"widgets","children":[]},{"title":"Bidang data","anchor":"field-data","children":[]}]}]},{"title":"Bekerja dengan cetakan formulir","anchor":"working-with-form-templates","children":[{"title":"Formulir pilihan pembangunan","anchor":"form-rendering-options","children":[]},{"title":"Membangun bidang manual","anchor":"rendering-fields-manually","children":[{"title":"Membangun formulir kesalahan pesan","anchor":"rendering-form-error-messages","children":[]}]},{"title":"Memutar terhadap bidang-bidang formulir","anchor":"looping-over-the-form-s-fields","children":[{"title":"Berputar terhadap bidang-bdaing sembunyi dan tampak","anchor":"looping-over-hidden-and-visible-fields","children":[]}]},{"title":"Formulir cetakan-cetakan dapat digunakan kembali","anchor":"reusable-form-templates","children":[]}]},{"title":"Topik lebih jauh","anchor":"further-topics","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Menggunakan Django","url":"/id/3.2/topics/"}],"prev":{"docname":"topics/http/sessions","title":"Bagaimana menggunakan sesi","url":"/id/3.2/topics/http/sessions/"},"next":{"docname":"topics/forms/formsets","title":"Formset","url":"/id/3.2/topics/forms/formsets/"},"formats":{"html":"/id/3.2/topics/forms/","markdown":"/id/3.2/topics/forms.md","json":"/id/3.2/topics/forms.json"},"source":"https://github.com/django/django/blob/stable/3.2.x/docs/topics/forms/index.txt","official":"https://docs.djangoproject.com/id/3.2/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","it","pt-br","ko","es","el","pl"]}