{"title":"Membuat formulir dari model","version":"4.0","locale":"id","docname":"topics/forms/modelforms","url":"/id/4.0/topics/forms/modelforms/","canonical":"https://djangodocs.dev/id/4.0/topics/forms/modelforms/","summary":"ModelForm Link to this heading # class ModelForm Link to this definition # If you're building a database-driven app, chances are you'll have forms that map closely…","html":"<h1>Membuat formulir dari model<a class=\"heading-anchor\" href=\"#creating-forms-from-models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<section id=\"modelform\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code><a class=\"heading-anchor\" href=\"#modelform\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.ModelForm\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">ModelForm</span></span><a class=\"heading-anchor\" href=\"#django.forms.ModelForm\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>If you're building a database-driven app, chances are you'll have forms that\nmap closely to Django models. For instance, you might have a <code class=\"docutils literal notranslate\"><span class=\"pre\">BlogComment</span></code>\nmodel, and you want to create a form that lets people submit comments. In this\ncase, it would be redundant to define the field types in your form, because\nyou've already defined the fields in your model.</p>\n<p>For this reason, Django provides a helper class that lets you create a <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code>\nclass from a Django model.</p>\n<p>Sebagai contoh:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ModelForm</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Article</span>\n\n<span class=\"go\"># Create the form class.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ArticleForm</span><span class=\"p\">(</span><span class=\"n\">ModelForm</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Article</span>\n<span class=\"gp\">... </span>        <span class=\"n\">fields</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;pub_date&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;headline&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;content&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;reporter&#39;</span><span class=\"p\">]</span>\n\n<span class=\"go\"># Creating a form to add an article.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ArticleForm</span><span class=\"p\">()</span>\n\n<span class=\"go\"># Creating a form to change an existing article.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">article</span> <span class=\"o\">=</span> <span class=\"n\">Article</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ArticleForm</span><span class=\"p\">(</span><span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">article</span><span class=\"p\">)</span>\n</code></pre></div>\n<section id=\"field-types\">\n<h3>Jenis bidang<a class=\"heading-anchor\" href=\"#field-types\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The generated <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code> class will have a form field for every model field\nspecified, in the order specified in the <code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></code> attribute.</p>\n<p>Setiap bidang model mempunyai biadng formulir awalan sesuai. Sebagai contoh, sebuah <code class=\"docutils literal notranslate\"><span class=\"pre\">CharField</span></code> pada sebuah model adalah diwakili sebagai <code class=\"docutils literal notranslate\"><span class=\"pre\">CharField</span></code> pada formulir. Sebuah model <code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code> diwakilkan sebagai sebuah <code class=\"docutils literal notranslate\"><span class=\"pre\">MultipleChoiceField</span></code>. Ini adalah daftar penuh dari perubahan:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>Bidang Model</p></th>\n<th class=\"head\"><p>Bidang Formulir</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.AutoField\" title=\"django.db.models.AutoField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AutoField</span></code></a></p></td>\n<td><p>Tidak muncul di formulir</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.BigAutoField\" title=\"django.db.models.BigAutoField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BigAutoField</span></code></a></p></td>\n<td><p>Tidak muncul di formulir</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.BigIntegerField\" title=\"django.db.models.BigIntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BigIntegerField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.IntegerField\" title=\"django.forms.IntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">IntegerField</span></code></a> dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">min_value</span></code> disetel ke -9223372036854775808 dan <code class=\"docutils literal notranslate\"><span class=\"pre\">max_value</span></code> disetel ke 9223372036854775807.</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.BinaryField\" title=\"django.db.models.BinaryField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BinaryField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a>, jika <a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.Field.editable\" title=\"django.db.models.Field.editable\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">editable</span></code></a> disetel menjadi <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> pada bidang model, sebaliknya tidak diwakilkan dalam formulir.</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.BooleanField\" title=\"django.db.models.BooleanField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BooleanField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.BooleanField\" title=\"django.forms.BooleanField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BooleanField</span></code></a>, atau <a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.NullBooleanField\" title=\"django.forms.NullBooleanField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">NullBooleanField</span></code></a> jika <code class=\"docutils literal notranslate\"><span class=\"pre\">null=True</span></code>.</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a> with <code class=\"docutils literal notranslate\"><span class=\"pre\">max_length</span></code> mensetel pada <code class=\"docutils literal notranslate\"><span class=\"pre\">max_length</span></code> bidang model dan <a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.CharField.empty_value\" title=\"django.forms.CharField.empty_value\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">empty_value</span></code></a> disetel menjadi <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> jika <code class=\"docutils literal notranslate\"><span class=\"pre\">null=True</span></code>.</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.DateField\" title=\"django.db.models.DateField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.DateField\" title=\"django.forms.DateField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateField</span></code></a></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.DateTimeField\" title=\"django.forms.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></code></a></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.DecimalField\" title=\"django.db.models.DecimalField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DecimalField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.DecimalField\" title=\"django.forms.DecimalField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DecimalField</span></code></a></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.DurationField\" title=\"django.db.models.DurationField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DurationField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.DurationField\" title=\"django.forms.DurationField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DurationField</span></code></a></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.EmailField\" title=\"django.db.models.EmailField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">EmailField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.EmailField\" title=\"django.forms.EmailField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">EmailField</span></code></a></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.FileField\" title=\"django.db.models.FileField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.FileField\" title=\"django.forms.FileField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileField</span></code></a></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.FilePathField\" title=\"django.db.models.FilePathField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FilePathField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.FilePathField\" title=\"django.forms.FilePathField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FilePathField</span></code></a></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.FloatField\" title=\"django.db.models.FloatField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FloatField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.FloatField\" title=\"django.forms.FloatField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FloatField</span></code></a></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.ModelChoiceField\" title=\"django.forms.ModelChoiceField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelChoiceField</span></code></a> (lihat dibawah)</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.ImageField\" title=\"django.db.models.ImageField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ImageField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.ImageField\" title=\"django.forms.ImageField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ImageField</span></code></a></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.IntegerField\" title=\"django.db.models.IntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">IntegerField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.IntegerField\" title=\"django.forms.IntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">IntegerField</span></code></a></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">IPAddressField</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">IPAddressField</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.GenericIPAddressField\" title=\"django.db.models.GenericIPAddressField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">GenericIPAddressField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.GenericIPAddressField\" title=\"django.forms.GenericIPAddressField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">GenericIPAddressField</span></code></a></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.JSONField\" title=\"django.db.models.JSONField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">JSONField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.JSONField\" title=\"django.forms.JSONField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">JSONField</span></code></a></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.ModelMultipleChoiceField\" title=\"django.forms.ModelMultipleChoiceField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelMultipleChoiceField</span></code></a> (lihat dibawah)</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.PositiveBigIntegerField\" title=\"django.db.models.PositiveBigIntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">PositiveBigIntegerField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.IntegerField\" title=\"django.forms.IntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">IntegerField</span></code></a></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.PositiveIntegerField\" title=\"django.db.models.PositiveIntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">PositiveIntegerField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.IntegerField\" title=\"django.forms.IntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">IntegerField</span></code></a></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.PositiveSmallIntegerField\" title=\"django.db.models.PositiveSmallIntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">PositiveSmallIntegerField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.IntegerField\" title=\"django.forms.IntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">IntegerField</span></code></a></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.SlugField\" title=\"django.db.models.SlugField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SlugField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.SlugField\" title=\"django.forms.SlugField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SlugField</span></code></a></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.SmallAutoField\" title=\"django.db.models.SmallAutoField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SmallAutoField</span></code></a></p></td>\n<td><p>Tidak muncul di formulir</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.SmallIntegerField\" title=\"django.db.models.SmallIntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SmallIntegerField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.IntegerField\" title=\"django.forms.IntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">IntegerField</span></code></a></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.TextField\" title=\"django.db.models.TextField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a> dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">widget=forms.Textarea</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.TimeField\" title=\"django.db.models.TimeField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TimeField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.TimeField\" title=\"django.forms.TimeField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TimeField</span></code></a></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.URLField\" title=\"django.db.models.URLField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">URLField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.URLField\" title=\"django.forms.URLField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">URLField</span></code></a></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.UUIDField\" title=\"django.db.models.UUIDField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">UUIDField</span></code></a></p></td>\n<td><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.UUIDField\" title=\"django.forms.UUIDField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">UUIDField</span></code></a></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>Seperti yang mungkin anda duga, jenis tipe model <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code> adalah kasus-kasus berbeda:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> diwakili oleh <code class=\"docutils literal notranslate\"><span class=\"pre\">django.forms.ModelChoiceField</span></code>, yaitu sebuah <code class=\"docutils literal notranslate\"><span class=\"pre\">ChoiceField</span></code> yang pilihan-pilihan adalah sebuah model <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code> diwakili oleh <code class=\"docutils literal notranslate\"><span class=\"pre\">django.forms.ModelMultipleChoiceField</span></code>, dimana <code class=\"docutils literal notranslate\"><span class=\"pre\">MultipleChoiceField</span></code> yang pilihan-pilihannya adalah sebuah model <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>.</p></li>\n</ul>\n<p>Sebagai tambahan, setiap bidang formulir dibangkitkan mempunyai atribut disetel sebagai berikut:</p>\n<ul class=\"simple\">\n<li><p>Jika bidang model mempunyai <code class=\"docutils literal notranslate\"><span class=\"pre\">blank=True</span></code>, maka <code class=\"docutils literal notranslate\"><span class=\"pre\">required</span></code> disetel ke <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> pada bidang formulir. Sebaliknya <code class=\"docutils literal notranslate\"><span class=\"pre\">required=True</span></code>.</p></li>\n<li><p>The form field's <code class=\"docutils literal notranslate\"><span class=\"pre\">label</span></code> is set to the <code class=\"docutils literal notranslate\"><span class=\"pre\">verbose_name</span></code> of the model\nfield, with the first character capitalized.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">help_text</span></code> bidang formulir disetel pada <code class=\"docutils literal notranslate\"><span class=\"pre\">help_text</span></code> dari bidang model.</p></li>\n<li><p>If the model field has <code class=\"docutils literal notranslate\"><span class=\"pre\">choices</span></code> set, then the form field's <code class=\"docutils literal notranslate\"><span class=\"pre\">widget</span></code>\nwill be set to <code class=\"docutils literal notranslate\"><span class=\"pre\">Select</span></code>, with choices coming from the model field's\n<code class=\"docutils literal notranslate\"><span class=\"pre\">choices</span></code>. The choices will normally include the blank choice which is\nselected by default. If the field is required, this forces the user to\nmake a selection. The blank choice will not be included if the model\nfield has <code class=\"docutils literal notranslate\"><span class=\"pre\">blank=False</span></code> and an explicit <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> value (the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> value will be initially selected instead).</p></li>\n</ul>\n<p>Akhirnya, catat bahwa anda dapat menimpa bidang formulir digunakan untuk bidang model diberikan. Lihat <a class=\"reference internal\" href=\"#overriding-the-default-fields\">Overriding the default fields</a> below.</p>\n</section>\n<section id=\"a-full-example\">\n<h3>Sebuah contoh penuh<a class=\"heading-anchor\" href=\"#a-full-example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Pertimbangkan kumpulan model ini:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ModelForm</span>\n\n<span class=\"n\">TITLE_CHOICES</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;MR&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Mr.&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;MRS&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Mrs.&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;MS&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Ms.&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Author</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</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\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</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\">3</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">TITLE_CHOICES</span><span class=\"p\">)</span>\n    <span class=\"n\">birth_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Book</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</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\">authors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorForm</span><span class=\"p\">(</span><span class=\"n\">ModelForm</span><span class=\"p\">):</span>\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Author</span>\n        <span class=\"n\">fields</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;birth_date&#39;</span><span class=\"p\">]</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">BookForm</span><span class=\"p\">(</span><span class=\"n\">ModelForm</span><span class=\"p\">):</span>\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Book</span>\n        <span class=\"n\">fields</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;authors&#39;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>With these models, the <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> subclasses above would be roughly\nequivalent to this (the only difference being the <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> method, which\nwe'll discuss in a moment.):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</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\">AuthorForm</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\">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\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span>\n        <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span>\n        <span class=\"n\">widget</span><span class=\"o\">=</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Select</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">TITLE_CHOICES</span><span class=\"p\">),</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">birth_date</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">required</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">BookForm</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\">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\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">authors</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">ModelMultipleChoiceField</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span>\n</code></pre></div>\n</section>\n<section id=\"validation-on-a-modelform\">\n<span id=\"validation-on-modelform\"></span><h3>Pengesahan pada sebuah <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code><a class=\"heading-anchor\" href=\"#validation-on-a-modelform\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Terdapat dua langkah utama dilibatkan dalam <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code>:</p>\n<ol class=\"arabic simple\">\n<li><p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/validation/\"><span class=\"doc\">Validating the form</span></a></p></li>\n<li><p><span class=\"xref std std-ref\">Validating the model instance 1</span></p></li>\n</ol>\n<p>Just like normal form validation, model form validation is triggered implicitly\nwhen calling <a class=\"reference internal\" href=\"/id/4.0/ref/forms/api/#django.forms.Form.is_valid\" title=\"django.forms.Form.is_valid\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code></a> or accessing the\n<a class=\"reference internal\" href=\"/id/4.0/ref/forms/api/#django.forms.Form.errors\" title=\"django.forms.Form.errors\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">errors</span></code></a> attribute and explicitly when calling\n<code class=\"docutils literal notranslate\"><span class=\"pre\">full_clean()</span></code>, although you will typically not use the latter method in\npractice.</p>\n<p>Pengesahan <code class=\"docutils literal notranslate\"><span class=\"pre\">Model</span></code> (<a class=\"reference internal\" href=\"/id/4.0/ref/models/instances/#django.db.models.Model.full_clean\" title=\"django.db.models.Model.full_clean\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Model.full_clean()</span></code></a>) dibangkitkan dari dalam langkah formulir pengesahan, tepat setelah metode formulir <code class=\"docutils literal notranslate\"><span class=\"pre\">clean()</span></code> dipanggil.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Peringatan</p>\n<p>The cleaning process modifies the model instance passed to the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> constructor in various ways. For instance, any date fields on\nthe model are converted into actual date objects. Failed validation may\nleave the underlying model instance in an inconsistent state and therefore\nit's not recommended to reuse it.</p>\n</aside>\n<section id=\"overriding-the-clean-method\">\n<span id=\"overriding-modelform-clean-method\"></span><h4>Menimpa metode <code class=\"docutils literal notranslate\"><span class=\"pre\">clean()</span></code><a class=\"heading-anchor\" href=\"#overriding-the-clean-method\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>You can override the <code class=\"docutils literal notranslate\"><span class=\"pre\">clean()</span></code> method on a model form to provide additional\nvalidation in the same way you can on a normal form.</p>\n<p>A model form instance attached to a model object will contain an <code class=\"docutils literal notranslate\"><span class=\"pre\">instance</span></code>\nattribute that gives its methods access to that specific model instance.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Peringatan</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm.clean()</span></code> method sets a flag that makes the <a class=\"reference internal\" href=\"/id/4.0/ref/models/instances/#validating-objects\"><span class=\"std std-ref\">model\nvalidation</span></a> step validate the uniqueness of model\nfields that are marked as <code class=\"docutils literal notranslate\"><span class=\"pre\">unique</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">unique_together</span></code> or\n<code class=\"docutils literal notranslate\"><span class=\"pre\">unique_for_date|month|year</span></code>.</p>\n<p>If you would like to override the <code class=\"docutils literal notranslate\"><span class=\"pre\">clean()</span></code> method and maintain this\nvalidation, you must call the parent class's <code class=\"docutils literal notranslate\"><span class=\"pre\">clean()</span></code> method.</p>\n</aside>\n</section>\n<section id=\"interaction-with-model-validation\">\n<h4>Interaksi dengan pengecekan model<a class=\"heading-anchor\" href=\"#interaction-with-model-validation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Sebagai bagian dari pengolahan pengesahan. <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> akan memanggil metode <code class=\"docutils literal notranslate\"><span class=\"pre\">clean()</span></code> untuk setiap bidang pada model anda yang mempunyai bidang sesuai pada formulir anda. Jika anda telah tidak menyertakan bidang model apapun, pengesahan tidak akan berjalan pada bidang-bidang tersebut. Lihat dokumentasi <span class=\"xref std std-doc\">form validation 1</span> untuk lebih pada bagimana bidang membersihkan dan pengesahan bekerja.</p>\n<p>Metode <code class=\"docutils literal notranslate\"><span class=\"pre\">clean()</span></code> model akan dipanggil sebelum pemeriksanaan keunikan apapun dibuat. Lihat <a class=\"reference internal\" href=\"/id/4.0/ref/models/instances/#validating-objects\"><span class=\"std std-ref\">Validating objects</span></a> untuk informasi lebih pada tautan <code class=\"docutils literal notranslate\"><span class=\"pre\">clean()</span></code> model.</p>\n</section>\n<section id=\"considerations-regarding-model-s-error-messages\">\n<span id=\"considerations-regarding-model-errormessages\"></span><h4>Pertimbangan mengenai <code class=\"docutils literal notranslate\"><span class=\"pre\">error_messages</span></code> model<a class=\"heading-anchor\" href=\"#considerations-regarding-model-s-error-messages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Error messages defined at the\n<a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/#django.forms.Field.error_messages\" title=\"django.forms.Field.error_messages\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">form</span> <span class=\"pre\">field</span></code></a> level or at the\n<a class=\"reference internal\" href=\"#modelforms-overriding-default-fields\"><span class=\"std std-ref\">form Meta</span></a> level always take\nprecedence over the error messages defined at the\n<a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.Field.error_messages\" title=\"django.db.models.Field.error_messages\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">model</span> <span class=\"pre\">field</span></code></a> level.</p>\n<p>Pesan-pesan kesalahan ditentukan pada <a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.Field.error_messages\" title=\"django.db.models.Field.error_messages\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">model</span> <span class=\"pre\">fields</span></code></a> hanya digunakan ketika <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code> dimunculkan selama langkah <span class=\"xref std std-ref\">model validation 1</span> dan tidak ada pesan kesalahan sesuai ditentukan pada tingkatan formulir.</p>\n<p>You can override the error messages from <code class=\"docutils literal notranslate\"><span class=\"pre\">NON_FIELD_ERRORS</span></code> raised by model\nvalidation by adding the <a class=\"reference internal\" href=\"/id/4.0/ref/exceptions/#django.core.exceptions.NON_FIELD_ERRORS\" title=\"django.core.exceptions.NON_FIELD_ERRORS\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">NON_FIELD_ERRORS</span></code></a> key\nto the <code class=\"docutils literal notranslate\"><span class=\"pre\">error_messages</span></code> dictionary of the <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code>’s inner <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code> class:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.exceptions</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">NON_FIELD_ERRORS</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ModelForm</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ArticleForm</span><span class=\"p\">(</span><span class=\"n\">ModelForm</span><span class=\"p\">):</span>\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">error_messages</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"n\">NON_FIELD_ERRORS</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n                <span class=\"s1\">&#39;unique_together&#39;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;</span><span class=\"si\">%(model_name)s</span><span class=\"s2\">&#39;s </span><span class=\"si\">%(field_labels)s</span><span class=\"s2\"> are not unique.&quot;</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n        <span class=\"p\">}</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"the-save-method\">\n<span id=\"topics-modelform-save\"></span><h3>Cara <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code><a class=\"heading-anchor\" href=\"#the-save-method\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Every <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> also has a <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> method. This method creates and saves\na database object from the data bound to the form. A subclass of <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code>\ncan accept an existing model instance as the keyword argument <code class=\"docutils literal notranslate\"><span class=\"pre\">instance</span></code>; if\nthis is supplied, <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> will update that instance. If it's not supplied,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> will create a new instance of the specified model:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Article</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ArticleForm</span>\n\n<span class=\"go\"># Create a form instance from POST data.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ArticleForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n\n<span class=\"go\"># Save a new Article object from the form&#39;s data.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">new_article</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n<span class=\"go\"># Create a form to edit an existing Article, but use</span>\n<span class=\"go\"># POST data to populate the form.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">Article</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">ArticleForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">a</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Note that if the form <a class=\"reference internal\" href=\"#validation-on-modelform\"><span class=\"std std-ref\">hasn't been validated</span></a>, calling <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> will do so by checking\n<code class=\"docutils literal notranslate\"><span class=\"pre\">form.errors</span></code>. A <code class=\"docutils literal notranslate\"><span class=\"pre\">ValueError</span></code> will be raised if the data in the form\ndoesn't validate -- i.e., if <code class=\"docutils literal notranslate\"><span class=\"pre\">form.errors</span></code> evaluates to <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n<p>If an optional field doesn't appear in the form's data, the resulting model\ninstance uses the model field <a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.Field.default\" title=\"django.db.models.Field.default\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">default</span></code></a>, if\nthere is one, for that field. This behavior doesn't apply to fields that use\n<a class=\"reference internal\" href=\"/id/4.0/ref/forms/widgets/#django.forms.CheckboxInput\" title=\"django.forms.CheckboxInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CheckboxInput</span></code></a>,\n<a class=\"reference internal\" href=\"/id/4.0/ref/forms/widgets/#django.forms.CheckboxSelectMultiple\" title=\"django.forms.CheckboxSelectMultiple\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CheckboxSelectMultiple</span></code></a>, or\n<a class=\"reference internal\" href=\"/id/4.0/ref/forms/widgets/#django.forms.SelectMultiple\" title=\"django.forms.SelectMultiple\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SelectMultiple</span></code></a> (or any custom widget whose\n<a class=\"reference internal\" href=\"/id/4.0/ref/forms/widgets/#django.forms.Widget.value_omitted_from_data\" title=\"django.forms.Widget.value_omitted_from_data\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">value_omitted_from_data()</span></code></a> method always returns\n<code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>) since an unchecked checkbox and unselected <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;select</span> <span class=\"pre\">multiple&gt;</span></code>\ndon't appear in the data of an HTML form submission. Use a custom form field or\nwidget if you're designing an API and want the default fallback behavior for a\nfield that uses one of these widgets.</p>\n<p>This <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> method accepts an optional <code class=\"docutils literal notranslate\"><span class=\"pre\">commit</span></code> keyword argument, which\naccepts either <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>. If you call <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> with\n<code class=\"docutils literal notranslate\"><span class=\"pre\">commit=False</span></code>, then it will return an object that hasn't yet been saved to\nthe database. In this case, it's up to you to call <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> on the resulting\nmodel instance. This is useful if you want to do custom processing on the\nobject before saving it, or if you want to use one of the specialized\n<a class=\"reference internal\" href=\"/id/4.0/ref/models/instances/#ref-models-force-insert\"><span class=\"std std-ref\">model saving options</span></a>. <code class=\"docutils literal notranslate\"><span class=\"pre\">commit</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>\nby default.</p>\n<p>Another side effect of using <code class=\"docutils literal notranslate\"><span class=\"pre\">commit=False</span></code> is seen when your model has\na many-to-many relation with another model. If your model has a many-to-many\nrelation and you specify <code class=\"docutils literal notranslate\"><span class=\"pre\">commit=False</span></code> when you save a form, Django cannot\nimmediately save the form data for the many-to-many relation. This is because\nit isn't possible to save many-to-many data for an instance until the instance\nexists in the database.</p>\n<p>To work around this problem, every time you save a form using <code class=\"docutils literal notranslate\"><span class=\"pre\">commit=False</span></code>,\nDjango adds a <code class=\"docutils literal notranslate\"><span class=\"pre\">save_m2m()</span></code> method to your <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> subclass. After\nyou've manually saved the instance produced by the form, you can invoke\n<code class=\"docutils literal notranslate\"><span class=\"pre\">save_m2m()</span></code> to save the many-to-many form data. For example:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Create a form instance with POST data.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">AuthorForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># Create, but don&#39;t save the new author instance.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">new_author</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># Modify the author in some way.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">new_author</span><span class=\"o\">.</span><span class=\"n\">some_field</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;some_value&#39;</span>\n\n<span class=\"c1\"># Save the new instance.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">new_author</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n<span class=\"c1\"># Now, save the many-to-many data for the form.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">save_m2m</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Calling <code class=\"docutils literal notranslate\"><span class=\"pre\">save_m2m()</span></code> is only required if you use <code class=\"docutils literal notranslate\"><span class=\"pre\">save(commit=False)</span></code>.\nWhen you use a <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> on a form, all data -- including many-to-many data --\nis saved without the need for any additional method calls.  For example:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Create a form instance with POST data.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"p\">()</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">AuthorForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">a</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># Create and save the new author instance. There&#39;s no need to do anything else.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">new_author</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Other than the <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">save_m2m()</span></code> methods, a <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> works\nexactly the same way as any other <code class=\"docutils literal notranslate\"><span class=\"pre\">forms</span></code> form. For example, the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code> method is used to check for validity, the <code class=\"docutils literal notranslate\"><span class=\"pre\">is_multipart()</span></code>\nmethod is used to determine whether a form requires multipart file upload (and\nhence whether <code class=\"docutils literal notranslate\"><span class=\"pre\">request.FILES</span></code> must be passed to the form), etc. See\n<a class=\"reference internal\" href=\"/id/4.0/ref/forms/api/#binding-uploaded-files\"><span class=\"std std-ref\">Mengikat berkas terunggah ke formulir</span></a> for more information.</p>\n</section>\n<section id=\"selecting-the-fields-to-use\">\n<span id=\"modelforms-selecting-fields\"></span><h3>Memilih bidang untuk digunakan<a class=\"heading-anchor\" href=\"#selecting-the-fields-to-use\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>It is strongly recommended that you explicitly set all fields that should be\nedited in the form using the <code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></code> attribute. Failure to do so can easily\nlead to security problems when a form unexpectedly allows a user to set certain\nfields, especially when new fields are added to a model. Depending on how the\nform is rendered, the problem may not even be visible on the web page.</p>\n<p>The alternative approach would be to include all fields automatically, or\nremove only some. This fundamental approach is known to be much less secure\nand has led to serious exploits on major websites (e.g. <a class=\"reference external\" href=\"https://github.blog/2012-03-04-public-key-security-vulnerability-and-mitigation/\">GitHub</a>).</p>\n<p>There are, however, two shortcuts available for cases where you can guarantee\nthese security concerns do not apply to you:</p>\n<ol class=\"arabic\">\n<li><p>Setel atribut <code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></code> ke nilai khusus <code class=\"docutils literal notranslate\"><span class=\"pre\">'__all__'</span></code> untuk menunjukkan bahwa semua bidang-bidang dalam model harus digunakan. Sebagai contoh:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ModelForm</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorForm</span><span class=\"p\">(</span><span class=\"n\">ModelForm</span><span class=\"p\">):</span>\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Author</span>\n        <span class=\"n\">fields</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;__all__&#39;</span>\n</code></pre></div>\n</li>\n<li><p>Setel atribut <code class=\"docutils literal notranslate\"><span class=\"pre\">exclude</span></code> dari kelas <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code> sebelah dalam <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> pada daftar dari bidang untuk tidak disertakan dari formulir.</p>\n<p>Sebagai contoh:</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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PartialAuthorForm</span><span class=\"p\">(</span><span class=\"n\">ModelForm</span><span class=\"p\">):</span>\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Author</span>\n        <span class=\"n\">exclude</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;title&#39;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Since the <code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></code> model has the 3 fields <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">title</span></code> and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">birth_date</span></code>, this will result in the fields <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">birth_date</span></code>\nbeing present on the form.</p>\n</li>\n</ol>\n<p>If either of these are used, the order the fields appear in the form will be the\norder the fields are defined in the model, with <code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code> instances\nappearing last.</p>\n<p>In addition, Django applies the following rule: if you set <code class=\"docutils literal notranslate\"><span class=\"pre\">editable=False</span></code> on\nthe model field, <em>any</em> form created from the model via <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> will not\ninclude that field.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Catatan</p>\n<p>Any fields not included in a form by the above logic\nwill not be set by the form's <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> method. Also, if you\nmanually add the excluded fields back to the form, they will not\nbe initialized from the model instance.</p>\n<p>Django will prevent any attempt to save an incomplete model, so if\nthe model does not allow the missing fields to be empty, and does\nnot provide a default value for the missing fields, any attempt to\n<code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> a <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> with missing fields will fail.  To\navoid this failure, you must instantiate your model with initial\nvalues for the missing, but required fields:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"p\">(</span><span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s1\">&#39;Mr&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">PartialAuthorForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">author</span><span class=\"p\">)</span>\n<span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Cara lain, anda dapat menggunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">save(commit=False)</span></code> dan secara manul menyetel bidang lain yang dibutuhkan:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">PartialAuthorForm</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=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Mr&#39;</span>\n<span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Lihat <a class=\"reference internal\" href=\"#the-save-method\">section on saving forms</a> untuk rincian lebih dalam menggunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">save(commit=False)</span></code>.</p>\n</aside>\n</section>\n<section id=\"overriding-the-default-fields\">\n<span id=\"modelforms-overriding-default-fields\"></span><h3>Mengesampingan nilai awal<a class=\"heading-anchor\" href=\"#overriding-the-default-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The default field types, as described in the <a class=\"reference internal\" href=\"#field-types\">Field types</a> table above, are\nsensible defaults. If you have a <code class=\"docutils literal notranslate\"><span class=\"pre\">DateField</span></code> in your model, chances are you'd\nwant that to be represented as a <code class=\"docutils literal notranslate\"><span class=\"pre\">DateField</span></code> in your form. But <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code>\ngives you the flexibility of changing the form field for a given model.</p>\n<p>Untuk menentukan widget penyesuaian untuk bidang, gunakan atribut <code class=\"docutils literal notranslate\"><span class=\"pre\">widgets</span></code> dari kelas <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code> sebelah dalam. Ini harus berupa nama bidang pemetaan kamus pada kelas widget atau instance.</p>\n<p>For example, if you want the <code class=\"docutils literal notranslate\"><span class=\"pre\">CharField</span></code> for the <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> attribute of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></code> to be represented by a <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;textarea&gt;</span></code> instead of its default\n<code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;text&quot;&gt;</span></code>, you can override the field's widget:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ModelForm</span><span class=\"p\">,</span> <span class=\"n\">Textarea</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Author</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorForm</span><span class=\"p\">(</span><span class=\"n\">ModelForm</span><span class=\"p\">):</span>\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Author</span>\n        <span class=\"n\">fields</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;birth_date&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">widgets</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;name&#39;</span><span class=\"p\">:</span> <span class=\"n\">Textarea</span><span class=\"p\">(</span><span class=\"n\">attrs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;cols&#39;</span><span class=\"p\">:</span> <span class=\"mi\">80</span><span class=\"p\">,</span> <span class=\"s1\">&#39;rows&#39;</span><span class=\"p\">:</span> <span class=\"mi\">20</span><span class=\"p\">}),</span>\n        <span class=\"p\">}</span>\n</code></pre></div>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">widgets</span></code> dictionary accepts either widget instances (e.g.,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">Textarea(...)</span></code>) or classes (e.g., <code class=\"docutils literal notranslate\"><span class=\"pre\">Textarea</span></code>). Note that the <code class=\"docutils literal notranslate\"><span class=\"pre\">widgets</span></code>\ndictionary is ignored for a model field with a non-empty <code class=\"docutils literal notranslate\"><span class=\"pre\">choices</span></code> attribute.\nIn this case, you must override the form field to use a different widget.</p>\n<p>Demikian pula, anda dapat menentukan atribut <code class=\"docutils literal notranslate\"><span class=\"pre\">labels</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">help_texts</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">error_messages</span></code> dari kelas <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code> sebelah dalam jika anda ingin lebih lanjut menyesuaikan bidang.</p>\n<p>Sebagai contoh jika anda ingin menyesuaikan kata-kata dari semua pengguna menghadai string untuk bidang <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">gettext_lazy</span> <span class=\"k\">as</span> <span class=\"n\">_</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorForm</span><span class=\"p\">(</span><span class=\"n\">ModelForm</span><span class=\"p\">):</span>\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Author</span>\n        <span class=\"n\">fields</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;birth_date&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;name&#39;</span><span class=\"p\">:</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;Writer&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n        <span class=\"n\">help_texts</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;name&#39;</span><span class=\"p\">:</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;Some useful help text.&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n        <span class=\"n\">error_messages</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;name&#39;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n                <span class=\"s1\">&#39;max_length&#39;</span><span class=\"p\">:</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;This writer&#39;s name is too long.&quot;</span><span class=\"p\">),</span>\n            <span class=\"p\">},</span>\n        <span class=\"p\">}</span>\n</code></pre></div>\n<p>Anda dapat juga menentukan <code class=\"docutils literal notranslate\"><span class=\"pre\">field_classes</span></code> untuk menyesuaikan jenis dari bidang terinstansiasi berdasarkan formulir.</p>\n<p>Sebagai contoh, jika anda ingin menggunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">MySlugFormField</span></code> untuk bidang <code class=\"docutils literal notranslate\"><span class=\"pre\">slug</span></code>, anda dapat melakukan berikut:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ModelForm</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Article</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ArticleForm</span><span class=\"p\">(</span><span class=\"n\">ModelForm</span><span class=\"p\">):</span>\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Article</span>\n        <span class=\"n\">fields</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;pub_date&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;headline&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;content&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;reporter&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;slug&#39;</span><span class=\"p\">]</span>\n        <span class=\"n\">field_classes</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;slug&#39;</span><span class=\"p\">:</span> <span class=\"n\">MySlugFormField</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n</code></pre></div>\n<p>Finally, if you want complete control over of a field -- including its type,\nvalidators, required, etc. -- you can do this by declaratively specifying\nfields like you would in a regular <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code>.</p>\n<p>If you want to specify a field's validators, you can do so by defining\nthe field declaratively and setting its <code class=\"docutils literal notranslate\"><span class=\"pre\">validators</span></code> parameter:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">CharField</span><span class=\"p\">,</span> <span class=\"n\">ModelForm</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Article</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ArticleForm</span><span class=\"p\">(</span><span class=\"n\">ModelForm</span><span class=\"p\">):</span>\n    <span class=\"n\">slug</span> <span class=\"o\">=</span> <span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">validators</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">validate_slug</span><span class=\"p\">])</span>\n\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Article</span>\n        <span class=\"n\">fields</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;pub_date&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;headline&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;content&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;reporter&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;slug&#39;</span><span class=\"p\">]</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Catatan</p>\n<p>When you explicitly instantiate a form field like this, it is important to\nunderstand how <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> and regular <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code> are related.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> is a regular <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code> which can automatically generate\ncertain fields. The fields that are automatically generated depend on\nthe content of the <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code> class and on which fields have already been\ndefined declaratively. Basically, <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> will <strong>only</strong> generate fields\nthat are <strong>missing</strong> from the form, or in other words, fields that weren't\ndefined declaratively.</p>\n<p>Fields defined declaratively are left as-is, therefore any customizations\nmade to <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code> attributes such as <code class=\"docutils literal notranslate\"><span class=\"pre\">widgets</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">labels</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">help_texts</span></code>,\nor <code class=\"docutils literal notranslate\"><span class=\"pre\">error_messages</span></code> are ignored; these only apply to fields that are\ngenerated automatically.</p>\n<p>Mirip, bidang-bidang ditentukan menerangkan tidak menggambar atribut mereka seperti <code class=\"docutils literal notranslate\"><span class=\"pre\">max_length</span></code> atau <code class=\"docutils literal notranslate\"><span class=\"pre\">required</span></code> dari model sesuai Jika anda ingin merawat perilaku ditentukan dalam model, anda harus mensetel argumen terkait secara jelas ketika menyatakan bidang formulir.</p>\n<p>Sebagai contoh, jika model <code class=\"docutils literal notranslate\"><span class=\"pre\">Article</span></code> kelihatan seperti ini:</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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Article</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">headline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span>\n        <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span>\n        <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"s1\">&#39;Use puns liberally&#39;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">content</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>and you want to do some custom validation for <code class=\"docutils literal notranslate\"><span class=\"pre\">headline</span></code>, while keeping\nthe <code class=\"docutils literal notranslate\"><span class=\"pre\">blank</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">help_text</span></code> values as specified, you might define\n<code class=\"docutils literal notranslate\"><span class=\"pre\">ArticleForm</span></code> like this:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ArticleForm</span><span class=\"p\">(</span><span class=\"n\">ModelForm</span><span class=\"p\">):</span>\n    <span class=\"n\">headline</span> <span class=\"o\">=</span> <span class=\"n\">MyFormField</span><span class=\"p\">(</span>\n        <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span>\n        <span class=\"n\">required</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"s1\">&#39;Use puns liberally&#39;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Article</span>\n        <span class=\"n\">fields</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;headline&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;content&#39;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Anda harus memastikan bahwa jenis dari biadng formulir dapat digunakan menyetel isi dari bidang model sesuai. Ketika mereka tidak sepadan, anda akan mendapatkan <code class=\"docutils literal notranslate\"><span class=\"pre\">ValueError</span></code> sebagai  peruahan bukan tersirat berlangsung.</p>\n<p>Lihat  <a class=\"reference internal\" href=\"/id/4.0/ref/forms/fields/\"><span class=\"doc\">dokumentasi bidang formulir</span></a> untuk lebih informasi pada bidang dan argumen mereka.</p>\n</aside>\n</section>\n<section id=\"enabling-localization-of-fields\">\n<h3>Mengadakan lokalisasi bidang<a class=\"heading-anchor\" href=\"#enabling-localization-of-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>By default, the fields in a <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> will not localize their data. To\nenable localization for fields, you can use the <code class=\"docutils literal notranslate\"><span class=\"pre\">localized_fields</span></code>\nattribute on the <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code> class.</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ModelForm</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Author</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorForm</span><span class=\"p\">(</span><span class=\"n\">ModelForm</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Author</span>\n<span class=\"gp\">... </span>        <span class=\"n\">localized_fields</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;birth_date&#39;</span><span class=\"p\">,)</span>\n</code></pre></div>\n<p>Jika <code class=\"docutils literal notranslate\"><span class=\"pre\">localized_fields</span></code> disetel menjadi nilai khusus <code class=\"docutils literal notranslate\"><span class=\"pre\">'__all__'</span></code>, semua bidang akan dilokalkan.</p>\n</section>\n<section id=\"form-inheritance\">\n<h3>Warisan formulir<a class=\"heading-anchor\" href=\"#form-inheritance\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>As with basic forms, you can extend and reuse <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForms</span></code> by inheriting\nthem. This is useful if you need to declare extra fields or extra methods on a\nparent class for use in a number of forms derived from models. For example,\nusing the previous <code class=\"docutils literal notranslate\"><span class=\"pre\">ArticleForm</span></code> class:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">EnhancedArticleForm</span><span class=\"p\">(</span><span class=\"n\">ArticleForm</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">clean_pub_date</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>        <span class=\"o\">...</span>\n</code></pre></div>\n<p>This creates a form that behaves identically to <code class=\"docutils literal notranslate\"><span class=\"pre\">ArticleForm</span></code>, except there's\nsome extra validation and cleaning for the <code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></code> field.</p>\n<p>Anda dapat juga mensubkelaskan kelas sebelah dalam <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code> induk jika anda ingin merubah daftar <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta.fields</span></code> atau <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta.exclude</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">RestrictedArticleForm</span><span class=\"p\">(</span><span class=\"n\">EnhancedArticleForm</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">(</span><span class=\"n\">ArticleForm</span><span class=\"o\">.</span><span class=\"n\">Meta</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>        <span class=\"n\">exclude</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;body&#39;</span><span class=\"p\">,)</span>\n</code></pre></div>\n<p>This adds the extra method from the <code class=\"docutils literal notranslate\"><span class=\"pre\">EnhancedArticleForm</span></code> and modifies\nthe original <code class=\"docutils literal notranslate\"><span class=\"pre\">ArticleForm.Meta</span></code> to remove one field.</p>\n<p>Terdapat sepasang hal untuk dicatat, bagaimanapun.</p>\n<ul>\n<li><p>Normal Python name resolution rules apply. If you have multiple base\nclasses that declare a <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code> inner class, only the first one will be\nused. This means the child's <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code>, if it exists, otherwise the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code> of the first parent, etc.</p></li>\n<li><p>It's possible to inherit from both <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> simultaneously,\nhowever, you must ensure that <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> appears first in the MRO. This is\nbecause these classes rely on different metaclasses and a class can only have\none metaclass.</p></li>\n<li><p>It's possible to declaratively remove a <code class=\"docutils literal notranslate\"><span class=\"pre\">Field</span></code> inherited from a parent class by\nsetting the name to be <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> on the subclass.</p>\n<p>You can only use this technique to opt out from a field defined declaratively\nby a parent class; it won't prevent the <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> metaclass from generating\na default field. To opt-out from default fields, see\n<a class=\"reference internal\" href=\"#modelforms-selecting-fields\"><span class=\"std std-ref\">Memilih bidang untuk digunakan</span></a>.</p>\n</li>\n</ul>\n</section>\n<section id=\"providing-initial-values\">\n<h3>Menyediakan nilai awal<a class=\"heading-anchor\" href=\"#providing-initial-values\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>As with regular forms, it's possible to specify initial data for forms by\nspecifying an <code class=\"docutils literal notranslate\"><span class=\"pre\">initial</span></code> parameter when instantiating the form. Initial\nvalues provided this way will override both initial values from the form field\nand values from an attached model instance. For example:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">article</span> <span class=\"o\">=</span> <span class=\"n\">Article</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">article</span><span class=\"o\">.</span><span class=\"n\">headline</span>\n<span class=\"go\">&#39;My headline&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ArticleForm</span><span class=\"p\">(</span><span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;headline&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Initial headline&#39;</span><span class=\"p\">},</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">article</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">form</span><span class=\"p\">[</span><span class=\"s1\">&#39;headline&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">()</span>\n<span class=\"go\">&#39;Initial headline&#39;</span>\n</code></pre></div>\n</section>\n<section id=\"modelform-factory-function\">\n<span id=\"modelforms-factory\"></span><h3>Fungsi pabrik ModelForm<a class=\"heading-anchor\" href=\"#modelform-factory-function\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Anda dapat membuat formulir dari model yang diberikan menggunakan fungsi berdiri sendiri <a class=\"reference internal\" href=\"/id/4.0/ref/forms/models/#django.forms.models.modelform_factory\" title=\"django.forms.models.modelform_factory\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">modelform_factory()</span></code></a>, daripada menggunakan pengertian kelas. Ini mungkin lebih nyaman jika anda tidak memiliki banyak penyesuaian untuk dibuat:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">modelform_factory</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Book</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">BookForm</span> <span class=\"o\">=</span> <span class=\"n\">modelform_factory</span><span class=\"p\">(</span><span class=\"n\">Book</span><span class=\"p\">,</span> <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s2\">&quot;author&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;title&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>This can also be used to make modifications to existing forms, for example by\nspecifying the widgets to be used for a given field:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Textarea</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Form</span> <span class=\"o\">=</span> <span class=\"n\">modelform_factory</span><span class=\"p\">(</span><span class=\"n\">Book</span><span class=\"p\">,</span> <span class=\"n\">form</span><span class=\"o\">=</span><span class=\"n\">BookForm</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>                         <span class=\"n\">widgets</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;title&quot;</span><span class=\"p\">:</span> <span class=\"n\">Textarea</span><span class=\"p\">()})</span>\n</code></pre></div>\n<p>Bidang-bidang untuk disertakan dapat ditentukan menggunakan argumen katakunci <code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">exclude</span></code>, atau atribut-atribut sesuai pada <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> didalam kelas <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code>. Harap lihat dokumentasi <a class=\"reference internal\" href=\"#modelforms-selecting-fields\"><span class=\"std std-ref\">Memilih bidang untuk digunakan</span></a> <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code>.</p>\n<p>... atau adakan lokalisasi untuk bidang khusus:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Form</span> <span class=\"o\">=</span> <span class=\"n\">modelform_factory</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">form</span><span class=\"o\">=</span><span class=\"n\">AuthorForm</span><span class=\"p\">,</span> <span class=\"n\">localized_fields</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s2\">&quot;birth_date&quot;</span><span class=\"p\">,))</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"model-formsets\">\n<span id=\"id1\"></span><h2>Model formsets<a class=\"heading-anchor\" href=\"#model-formsets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.models.BaseModelFormSet\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">models.</span></span><span class=\"sig-name descname\"><span class=\"pre\">BaseModelFormSet</span></span><a class=\"heading-anchor\" href=\"#django.forms.models.BaseModelFormSet\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Like <a class=\"reference internal\" href=\"/id/4.0/topics/forms/formsets/\"><span class=\"doc\">regular formsets</span></a>, Django provides a couple\nof enhanced formset classes to make working with Django models more\nconvenient. Let's reuse the <code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></code> model from above:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">modelformset_factory</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Author</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">AuthorFormSet</span> <span class=\"o\">=</span> <span class=\"n\">modelformset_factory</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Using <code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></code> restricts the formset to use only the given fields.\nAlternatively, you can take an &quot;opt-out&quot; approach, specifying which fields to\nexclude:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">AuthorFormSet</span> <span class=\"o\">=</span> <span class=\"n\">modelformset_factory</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">exclude</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s1\">&#39;birth_date&#39;</span><span class=\"p\">,))</span>\n</code></pre></div>\n<p>This will create a formset that is capable of working with the data associated\nwith the <code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></code> model. It works just like a regular formset:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">formset</span> <span class=\"o\">=</span> <span class=\"n\">AuthorFormSet</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">formset</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;input type=&quot;hidden&quot; name=&quot;form-TOTAL_FORMS&quot; value=&quot;1&quot; id=&quot;id_form-TOTAL_FORMS&quot;&gt;&lt;input type=&quot;hidden&quot; name=&quot;form-INITIAL_FORMS&quot; value=&quot;0&quot; id=&quot;id_form-INITIAL_FORMS&quot;&gt;&lt;input type=&quot;hidden&quot; name=&quot;form-MIN_NUM_FORMS&quot; value=&quot;0&quot; id=&quot;id_form-MIN_NUM_FORMS&quot;&gt;&lt;input type=&quot;hidden&quot; name=&quot;form-MAX_NUM_FORMS&quot; value=&quot;1000&quot; id=&quot;id_form-MAX_NUM_FORMS&quot;&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_form-0-name&quot;&gt;Name:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input id=&quot;id_form-0-name&quot; type=&quot;text&quot; name=&quot;form-0-name&quot; maxlength=&quot;100&quot;&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_form-0-title&quot;&gt;Title:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;select name=&quot;form-0-title&quot; id=&quot;id_form-0-title&quot;&gt;</span>\n<span class=\"go\">&lt;option value=&quot;&quot; selected&gt;---------&lt;/option&gt;</span>\n<span class=\"go\">&lt;option value=&quot;MR&quot;&gt;Mr.&lt;/option&gt;</span>\n<span class=\"go\">&lt;option value=&quot;MRS&quot;&gt;Mrs.&lt;/option&gt;</span>\n<span class=\"go\">&lt;option value=&quot;MS&quot;&gt;Ms.&lt;/option&gt;</span>\n<span class=\"go\">&lt;/select&gt;&lt;input type=&quot;hidden&quot; name=&quot;form-0-id&quot; id=&quot;id_form-0-id&quot;&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Catatan</p>\n<p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/models/#django.forms.models.modelformset_factory\" title=\"django.forms.models.modelformset_factory\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">modelformset_factory()</span></code></a> menggunakan <a class=\"reference internal\" href=\"/id/4.0/ref/forms/formsets/#django.forms.formsets.formset_factory\" title=\"django.forms.formsets.formset_factory\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">formset_factory()</span></code></a> untuk membangkitkan formset. Ini berarti bahwa model formset adalah perpanjangan dari formset dasar yang mengetahui bagaimana berinteraksi dengan model tertentu.</p>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Catatan</p>\n<p>When using <a class=\"reference internal\" href=\"/id/4.0/topics/db/models/#multi-table-inheritance\"><span class=\"std std-ref\">multi-table inheritance</span></a>, forms\ngenerated by a formset factory will contain a parent link field (by default\n<code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;parent_model_name&gt;_ptr</span></code>) instead of an <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> field.</p>\n</aside>\n<section id=\"changing-the-queryset\">\n<h3>Merubah queryset<a class=\"heading-anchor\" href=\"#changing-the-queryset\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>By default, when you create a formset from a model, the formset will use a\nqueryset that includes all objects in the model (e.g.,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">Author.objects.all()</span></code>). You can override this behavior by using the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">queryset</span></code> argument:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">formset</span> <span class=\"o\">=</span> <span class=\"n\">AuthorFormSet</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__startswith</span><span class=\"o\">=</span><span class=\"s1\">&#39;O&#39;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Alternatifnya, anda dapat membuat sub kelas yang mensetel <code class=\"docutils literal notranslate\"><span class=\"pre\">self.queryset</span></code> dalam <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">BaseModelFormSet</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Author</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">BaseAuthorFormSet</span><span class=\"p\">(</span><span class=\"n\">BaseModelFormSet</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__startswith</span><span class=\"o\">=</span><span class=\"s1\">&#39;O&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Kemudian, lewati kelas <code class=\"docutils literal notranslate\"><span class=\"pre\">BaseAuthorFormSet</span></code> anda ke fungsi pabrik:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">AuthorFormSet</span> <span class=\"o\">=</span> <span class=\"n\">modelformset_factory</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">),</span> <span class=\"n\">formset</span><span class=\"o\">=</span><span class=\"n\">BaseAuthorFormSet</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>If you want to return a formset that doesn't include <em>any</em> pre-existing\ninstances of the model, you can specify an empty QuerySet:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">AuthorFormSet</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">none</span><span class=\"p\">())</span>\n</code></pre></div>\n</section>\n<section id=\"changing-the-form\">\n<h3>Merubah formulir<a class=\"heading-anchor\" href=\"#changing-the-form\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>By default, when you use <code class=\"docutils literal notranslate\"><span class=\"pre\">modelformset_factory</span></code>, a model form will\nbe created using <a class=\"reference internal\" href=\"/id/4.0/ref/forms/models/#django.forms.models.modelform_factory\" title=\"django.forms.models.modelform_factory\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">modelform_factory()</span></code></a>.\nOften, it can be useful to specify a custom model form. For example,\nyou can create a custom model form that has custom validation:</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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">ModelForm</span><span class=\"p\">):</span>\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Author</span>\n        <span class=\"n\">fields</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">clean_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># custom validation for the name field</span>\n        <span class=\"o\">...</span>\n</code></pre></div>\n<p>Kemudian, lewati formulir model anda ke fungsi pabrik:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">AuthorFormSet</span> <span class=\"o\">=</span> <span class=\"n\">modelformset_factory</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">form</span><span class=\"o\">=</span><span class=\"n\">AuthorForm</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>It is not always necessary to define a custom model form. The\n<code class=\"docutils literal notranslate\"><span class=\"pre\">modelformset_factory</span></code> function has several arguments which are\npassed through to <code class=\"docutils literal notranslate\"><span class=\"pre\">modelform_factory</span></code>, which are described below.</p>\n</section>\n<section id=\"specifying-widgets-to-use-in-the-form-with-widgets\">\n<h3>Menentukan widget yang digunakan dalam formulir dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">widgets</span></code><a class=\"heading-anchor\" href=\"#specifying-widgets-to-use-in-the-form-with-widgets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Using the <code class=\"docutils literal notranslate\"><span class=\"pre\">widgets</span></code> parameter, you can specify a dictionary of values to\ncustomize the <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code>’s widget class for a particular field. This\nworks the same way as the <code class=\"docutils literal notranslate\"><span class=\"pre\">widgets</span></code> dictionary on the inner <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code>\nclass of a <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> works:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">AuthorFormSet</span> <span class=\"o\">=</span> <span class=\"n\">modelformset_factory</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"n\">widgets</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">:</span> <span class=\"n\">Textarea</span><span class=\"p\">(</span><span class=\"n\">attrs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;cols&#39;</span><span class=\"p\">:</span> <span class=\"mi\">80</span><span class=\"p\">,</span> <span class=\"s1\">&#39;rows&#39;</span><span class=\"p\">:</span> <span class=\"mi\">20</span><span class=\"p\">})})</span>\n</code></pre></div>\n</section>\n<section id=\"enabling-localization-for-fields-with-localized-fields\">\n<h3>Mengadakan lokalisasi untuk bidang dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">localized_fields</span></code><a class=\"heading-anchor\" href=\"#enabling-localization-for-fields-with-localized-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Menggunakan parameter <code class=\"docutils literal notranslate\"><span class=\"pre\">localized_fields</span></code>, anda dapat mengadakan lokalisasi untuk bidang ini dalam formulir.</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">AuthorFormSet</span> <span class=\"o\">=</span> <span class=\"n\">modelformset_factory</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;birth_date&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"n\">localized_fields</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s1\">&#39;birth_date&#39;</span><span class=\"p\">,))</span>\n</code></pre></div>\n<p>Jika <code class=\"docutils literal notranslate\"><span class=\"pre\">localized_fields</span></code> disetel menjadi nilai khusus <code class=\"docutils literal notranslate\"><span class=\"pre\">'__all__'</span></code>, semua bidang akan dilokalkan.</p>\n</section>\n<section id=\"id2\">\n<h3>Menyediakan nilai awal<a class=\"heading-anchor\" href=\"#id2\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>As with regular formsets, it's possible to <a class=\"reference internal\" href=\"/id/4.0/topics/forms/formsets/#formsets-initial-data\"><span class=\"std std-ref\">specify initial data</span></a> for forms in the formset by specifying an <code class=\"docutils literal notranslate\"><span class=\"pre\">initial</span></code>\nparameter when instantiating the model formset class returned by\n<a class=\"reference internal\" href=\"/id/4.0/ref/forms/models/#django.forms.models.modelformset_factory\" title=\"django.forms.models.modelformset_factory\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">modelformset_factory()</span></code></a>. However, with model\nformsets, the initial values only apply to extra forms, those that aren't\nattached to an existing model instance. If the length of <code class=\"docutils literal notranslate\"><span class=\"pre\">initial</span></code> exceeds\nthe number of extra forms, the excess initial data is ignored. If the extra\nforms with initial data aren't changed by the user, they won't be validated or\nsaved.</p>\n</section>\n<section id=\"saving-objects-in-the-formset\">\n<span id=\"id3\"></span><h3>Saving objects in the formset<a class=\"heading-anchor\" href=\"#saving-objects-in-the-formset\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>As with a <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code>, you can save the data as a model object. This is done\nwith the formset's <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> method:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Create a formset instance with POST data.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">formset</span> <span class=\"o\">=</span> <span class=\"n\">AuthorFormSet</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># Assuming all is valid, save the data.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">instances</span> <span class=\"o\">=</span> <span class=\"n\">formset</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> method returns the instances that have been saved to the\ndatabase. If a given instance's data didn't change in the bound data, the\ninstance won't be saved to the database and won't be included in the return\nvalue (<code class=\"docutils literal notranslate\"><span class=\"pre\">instances</span></code>, in the above example).</p>\n<p>When fields are missing from the form (for example because they have been\nexcluded), these fields will not be set by the <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> method. You can find\nmore information about this restriction, which also holds for regular\n<code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForms</span></code>, in <a class=\"reference internal\" href=\"#selecting-the-fields-to-use\">Selecting the fields to use</a>.</p>\n<p>Lewati <code class=\"docutils literal notranslate\"><span class=\"pre\">commit=False</span></code> untuk mengembalikan instance model tidak tersimpan:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># don&#39;t save to the database</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">instances</span> <span class=\"o\">=</span> <span class=\"n\">formset</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"k\">for</span> <span class=\"n\">instance</span> <span class=\"ow\">in</span> <span class=\"n\">instances</span><span class=\"p\">:</span>\n<span class=\"o\">...</span>     <span class=\"c1\"># do something with instance</span>\n<span class=\"o\">...</span>     <span class=\"n\">instance</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>This gives you the ability to attach data to the instances before saving them\nto the database. If your formset contains a <code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code>, you'll also\nneed to call <code class=\"docutils literal notranslate\"><span class=\"pre\">formset.save_m2m()</span></code> to ensure the many-to-many relationships\nare saved properly.</p>\n<p>After calling <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code>, your model formset will have three new attributes\ncontaining the formset's changes:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.models.BaseModelFormSet.changed_objects\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">models.BaseModelFormSet.</span></span><span class=\"sig-name descname\"><span class=\"pre\">changed_objects</span></span><a class=\"heading-anchor\" href=\"#django.forms.models.BaseModelFormSet.changed_objects\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.models.BaseModelFormSet.deleted_objects\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">models.BaseModelFormSet.</span></span><span class=\"sig-name descname\"><span class=\"pre\">deleted_objects</span></span><a class=\"heading-anchor\" href=\"#django.forms.models.BaseModelFormSet.deleted_objects\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.models.BaseModelFormSet.new_objects\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">models.BaseModelFormSet.</span></span><span class=\"sig-name descname\"><span class=\"pre\">new_objects</span></span><a class=\"heading-anchor\" href=\"#django.forms.models.BaseModelFormSet.new_objects\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n</section>\n<section id=\"limiting-the-number-of-editable-objects\">\n<span id=\"model-formsets-max-num\"></span><h3>Membatasi angka dari obyek dapat di sunting<a class=\"heading-anchor\" href=\"#limiting-the-number-of-editable-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>As with regular formsets, you can use the <code class=\"docutils literal notranslate\"><span class=\"pre\">max_num</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code> parameters\nto <a class=\"reference internal\" href=\"/id/4.0/ref/forms/models/#django.forms.models.modelformset_factory\" title=\"django.forms.models.modelformset_factory\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">modelformset_factory()</span></code></a> to limit the number of\nextra forms displayed.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">max_num</span></code> tidak mencegah obyek yang ada dari menjadi ditampilkan:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Author: Charles Baudelaire&gt;, &lt;Author: Paul Verlaine&gt;, &lt;Author: Walt Whitman&gt;]&gt;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">AuthorFormSet</span> <span class=\"o\">=</span> <span class=\"n\">modelformset_factory</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,),</span> <span class=\"n\">max_num</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">formset</span> <span class=\"o\">=</span> <span class=\"n\">AuthorFormSet</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"p\">[</span><span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">formset</span><span class=\"o\">.</span><span class=\"n\">get_queryset</span><span class=\"p\">()]</span>\n<span class=\"go\">[&#39;Charles Baudelaire&#39;, &#39;Paul Verlaine&#39;, &#39;Walt Whitman&#39;]</span>\n</code></pre></div>\n<p>Also, <code class=\"docutils literal notranslate\"><span class=\"pre\">extra=0</span></code> doesn't prevent creation of new model instances as you can\n<a class=\"reference internal\" href=\"/id/4.0/topics/forms/formsets/#understanding-the-managementform\"><span class=\"std std-ref\">add additional forms with JavaScript</span></a>\nor send additional POST data. Formsets <a class=\"extlink-ticket reference external\" href=\"https://code.djangoproject.com/ticket/26142\">don't yet provide functionality</a> for an &quot;edit only&quot; view that prevents creation of new instances.</p>\n<p>If the value of <code class=\"docutils literal notranslate\"><span class=\"pre\">max_num</span></code> is greater than the number of existing related\nobjects, up to <code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code> additional blank forms will be added to the formset,\nso long as the total number of forms does not exceed <code class=\"docutils literal notranslate\"><span class=\"pre\">max_num</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">AuthorFormSet</span> <span class=\"o\">=</span> <span class=\"n\">modelformset_factory</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,),</span> <span class=\"n\">max_num</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">extra</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">formset</span> <span class=\"o\">=</span> <span class=\"n\">AuthorFormSet</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> <span class=\"n\">form</span> <span class=\"ow\">in</span> <span class=\"n\">formset</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">as_table</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_form-0-name&quot;&gt;Name:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input id=&quot;id_form-0-name&quot; type=&quot;text&quot; name=&quot;form-0-name&quot; value=&quot;Charles Baudelaire&quot; maxlength=&quot;100&quot;&gt;&lt;input type=&quot;hidden&quot; name=&quot;form-0-id&quot; value=&quot;1&quot; id=&quot;id_form-0-id&quot;&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_form-1-name&quot;&gt;Name:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input id=&quot;id_form-1-name&quot; type=&quot;text&quot; name=&quot;form-1-name&quot; value=&quot;Paul Verlaine&quot; maxlength=&quot;100&quot;&gt;&lt;input type=&quot;hidden&quot; name=&quot;form-1-id&quot; value=&quot;3&quot; id=&quot;id_form-1-id&quot;&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_form-2-name&quot;&gt;Name:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input id=&quot;id_form-2-name&quot; type=&quot;text&quot; name=&quot;form-2-name&quot; value=&quot;Walt Whitman&quot; maxlength=&quot;100&quot;&gt;&lt;input type=&quot;hidden&quot; name=&quot;form-2-id&quot; value=&quot;2&quot; id=&quot;id_form-2-id&quot;&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n<span class=\"go\">&lt;tr&gt;&lt;th&gt;&lt;label for=&quot;id_form-3-name&quot;&gt;Name:&lt;/label&gt;&lt;/th&gt;&lt;td&gt;&lt;input id=&quot;id_form-3-name&quot; type=&quot;text&quot; name=&quot;form-3-name&quot; maxlength=&quot;100&quot;&gt;&lt;input type=&quot;hidden&quot; name=&quot;form-3-id&quot; id=&quot;id_form-3-id&quot;&gt;&lt;/td&gt;&lt;/tr&gt;</span>\n</code></pre></div>\n<p>Sebuah nilai <code class=\"docutils literal notranslate\"><span class=\"pre\">max_num</span></code> dari <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> (awalan) menaruh batasan tinggi pada sejumlah formulir-formulir ditampilkan (1000). Dalam praktiknya ini adalah setara pada tidak ada batasan.</p>\n</section>\n<section id=\"using-a-model-formset-in-a-view\">\n<h3>Using a model formset in a view<a class=\"heading-anchor\" href=\"#using-a-model-formset-in-a-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Model formsets are very similar to formsets. Let's say we want to present a\nformset to edit <code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></code> model instances:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">modelformset_factory</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<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Author</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">manage_authors</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">AuthorFormSet</span> <span class=\"o\">=</span> <span class=\"n\">modelformset_factory</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">))</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=\"n\">formset</span> <span class=\"o\">=</span> <span class=\"n\">AuthorFormSet</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">formset</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"n\">formset</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"c1\"># do something.</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">formset</span> <span class=\"o\">=</span> <span class=\"n\">AuthorFormSet</span><span class=\"p\">()</span>\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;manage_authors.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;formset&#39;</span><span class=\"p\">:</span> <span class=\"n\">formset</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>As you can see, the view logic of a model formset isn't drastically different\nthan that of a &quot;normal&quot; formset. The only difference is that we call\n<code class=\"docutils literal notranslate\"><span class=\"pre\">formset.save()</span></code> to save the data into the database. (This was described\nabove, in <a class=\"reference internal\" href=\"#saving-objects-in-the-formset\"><span class=\"std std-ref\">Saving objects in the formset</span></a>.)</p>\n</section>\n<section id=\"overriding-clean-on-a-modelformset\">\n<span id=\"model-formsets-overriding-clean\"></span><h3>Menimpa <code class=\"docutils literal notranslate\"><span class=\"pre\">clean()</span></code> pada sebuah <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelFormSet</span></code><a class=\"heading-anchor\" href=\"#overriding-clean-on-a-modelformset\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Just like with <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForms</span></code>, by default the <code class=\"docutils literal notranslate\"><span class=\"pre\">clean()</span></code> method of a\n<code class=\"docutils literal notranslate\"><span class=\"pre\">ModelFormSet</span></code> will validate that none of the items in the formset violate\nthe unique constraints on your model (either <code class=\"docutils literal notranslate\"><span class=\"pre\">unique</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">unique_together</span></code> or\n<code class=\"docutils literal notranslate\"><span class=\"pre\">unique_for_date|month|year</span></code>).  If you want to override the <code class=\"docutils literal notranslate\"><span class=\"pre\">clean()</span></code> method\non a <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelFormSet</span></code> and maintain this validation, you must call the parent\nclass's <code class=\"docutils literal notranslate\"><span class=\"pre\">clean</span></code> method:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">BaseModelFormSet</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModelFormSet</span><span class=\"p\">(</span><span class=\"n\">BaseModelFormSet</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">clean</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">clean</span><span class=\"p\">()</span>\n        <span class=\"c1\"># example custom validation across forms in the formset</span>\n        <span class=\"k\">for</span> <span class=\"n\">form</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">forms</span><span class=\"p\">:</span>\n            <span class=\"c1\"># your custom formset validation</span>\n            <span class=\"o\">...</span>\n</code></pre></div>\n<p>Also note that by the time you reach this step, individual model instances\nhave already been created for each <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code>. Modifying a value in\n<code class=\"docutils literal notranslate\"><span class=\"pre\">form.cleaned_data</span></code> is not sufficient to affect the saved value. If you wish\nto modify a value in <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelFormSet.clean()</span></code> you must modify\n<code class=\"docutils literal notranslate\"><span class=\"pre\">form.instance</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">BaseModelFormSet</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModelFormSet</span><span class=\"p\">(</span><span class=\"n\">BaseModelFormSet</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">clean</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">clean</span><span class=\"p\">()</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">form</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">forms</span><span class=\"p\">:</span>\n            <span class=\"n\">name</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;name&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">upper</span><span class=\"p\">()</span>\n            <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">name</span>\n            <span class=\"c1\"># update the instance value.</span>\n            <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">instance</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">name</span>\n</code></pre></div>\n</section>\n<section id=\"using-a-custom-queryset\">\n<h3>Menggunakan queryset penyesuaian<a class=\"heading-anchor\" href=\"#using-a-custom-queryset\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Seperti dinyatakan sebelumnya, anda dapat menimpa queryset awalan digunakan oleh formset model:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">modelformset_factory</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<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Author</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">manage_authors</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">AuthorFormSet</span> <span class=\"o\">=</span> <span class=\"n\">modelformset_factory</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__startswith</span><span class=\"o\">=</span><span class=\"s1\">&#39;O&#39;</span><span class=\"p\">)</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=\"s2\">&quot;POST&quot;</span><span class=\"p\">:</span>\n        <span class=\"n\">formset</span> <span class=\"o\">=</span> <span class=\"n\">AuthorFormSet</span><span class=\"p\">(</span>\n            <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span><span class=\"p\">,</span>\n            <span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">queryset</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">formset</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"n\">formset</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"c1\"># Do something.</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">formset</span> <span class=\"o\">=</span> <span class=\"n\">AuthorFormSet</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">queryset</span><span class=\"p\">)</span>\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;manage_authors.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;formset&#39;</span><span class=\"p\">:</span> <span class=\"n\">formset</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>Catat bahwa kami melewatkan argumen <code class=\"docutils literal notranslate\"><span class=\"pre\">queryset</span></code> dalam kedua kasus <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> dalam contoh ini.</p>\n</section>\n<section id=\"using-the-formset-in-the-template\">\n<h3>Menggunakan formset dalam cetakan<a class=\"heading-anchor\" href=\"#using-the-formset-in-the-template\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ada tiga cara untuk mengirim sebuah formset dalam sebuah cetakan Django.</p>\n<p>Pertama, anda dapat membiarkan formset melakukan sebagian besar pekerjaan:</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\">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=\"nv\">formset</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">form</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Kedua, anda dapat secara manual membangun formset, tetapi membiarkan formulir berurusan dengan itu sendiri:</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\">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=\"nv\">formset.management_form</span> <span class=\"cp\">}}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">form</span> <span class=\"k\">in</span> <span class=\"nv\">formset</span> <span class=\"cp\">%}</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">form</span> <span class=\"cp\">}}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">form</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>When you manually render the forms yourself, be sure to render the management\nform as shown above. See the <a class=\"reference internal\" href=\"/id/4.0/topics/forms/formsets/#understanding-the-managementform\"><span class=\"std std-ref\">management form documentation</span></a>.</p>\n<p>Ketiga, anda dapat secara manual membangun setiap bidang:</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\">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=\"nv\">formset.management_form</span> <span class=\"cp\">}}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">form</span> <span class=\"k\">in</span> <span class=\"nv\">formset</span> <span class=\"cp\">%}</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</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\">endfor</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">form</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>If you opt to use this third method and you don't iterate over the fields with\na <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">for</span> <span class=\"pre\">%}</span></code> loop, you'll need to render the primary key field. For example,\nif you were rendering the <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">age</span></code> fields of a model:</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\">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=\"nv\">formset.management_form</span> <span class=\"cp\">}}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">form</span> <span class=\"k\">in</span> <span class=\"nv\">formset</span> <span class=\"cp\">%}</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">form.id</span> <span class=\"cp\">}}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n            <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.name</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n            <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.age</span> <span class=\"cp\">}}</span><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    <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">form</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Notice how we need to explicitly render <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.id</span> <span class=\"pre\">}}</span></code>. This ensures that\nthe model formset, in the <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> case, will work correctly. (This example\nassumes a primary key named <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code>. If you've explicitly defined your own\nprimary key that isn't called <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code>, make sure it gets rendered.)</p>\n</section>\n</section>\n<section id=\"inline-formsets\">\n<span id=\"id4\"></span><h2>Formset berderet<a class=\"heading-anchor\" href=\"#inline-formsets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.models.BaseInlineFormSet\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">models.</span></span><span class=\"sig-name descname\"><span class=\"pre\">BaseInlineFormSet</span></span><a class=\"heading-anchor\" href=\"#django.forms.models.BaseInlineFormSet\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Formset berderet adalah lapisan abstraksi kecil pada atas formset model. Ini menyederhanakan kasus dari bekerja dengan obyek-obyek terkait melalui sebuah foreign key. Seandainya anda mempunyai dua model ini:</p>\n<div class=\"code-block\" data-language=\"python\"><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.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Author</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</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\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Book</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</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</code></pre></div>\n<p>If you want to create a formset that allows you to edit books belonging to\na particular author, you could do this:</p>\n<div class=\"code-block\" data-language=\"python\"><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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">inlineformset_factory</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">BookFormSet</span> <span class=\"o\">=</span> <span class=\"n\">inlineformset_factory</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">Book</span><span class=\"p\">,</span> <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s1\">&#39;title&#39;</span><span class=\"p\">,))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Mike Royko&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">formset</span> <span class=\"o\">=</span> <span class=\"n\">BookFormSet</span><span class=\"p\">(</span><span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">author</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">BookFormSet</span></code>'s <a class=\"reference internal\" href=\"/id/4.0/topics/forms/formsets/#formset-prefix\"><span class=\"std std-ref\">prefix</span></a> is <code class=\"docutils literal notranslate\"><span class=\"pre\">'book_set'</span></code>\n(<code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;model</span> <span class=\"pre\">name&gt;_set</span></code> ). If <code class=\"docutils literal notranslate\"><span class=\"pre\">Book</span></code>'s <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> to <code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></code> has a\n<a class=\"reference internal\" href=\"/id/4.0/ref/models/fields/#django.db.models.ForeignKey.related_name\" title=\"django.db.models.ForeignKey.related_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">related_name</span></code></a>, that's used instead.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Catatan</p>\n<p><a class=\"reference internal\" href=\"/id/4.0/ref/forms/models/#django.forms.models.inlineformset_factory\" title=\"django.forms.models.inlineformset_factory\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">inlineformset_factory()</span></code></a> menggunakan <a class=\"reference internal\" href=\"/id/4.0/ref/forms/models/#django.forms.models.modelformset_factory\" title=\"django.forms.models.modelformset_factory\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">modelformset_factory()</span></code></a> dan menandai <code class=\"docutils literal notranslate\"><span class=\"pre\">can_delete=True</span></code>.</p>\n</aside>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Lihat juga</p>\n<p><a class=\"reference internal\" href=\"/id/4.0/topics/forms/formsets/#manually-rendered-can-delete-and-can-order\"><span class=\"std std-ref\">Manually rendered can_delete and can_order</span></a>.</p>\n</aside>\n<section id=\"overriding-methods-on-an-inlineformset\">\n<h3>Metode menimpa pada <code class=\"docutils literal notranslate\"><span class=\"pre\">InlineFormSet</span></code><a class=\"heading-anchor\" href=\"#overriding-methods-on-an-inlineformset\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>When overriding methods on <code class=\"docutils literal notranslate\"><span class=\"pre\">InlineFormSet</span></code>, you should subclass\n<a class=\"reference internal\" href=\"#django.forms.models.BaseInlineFormSet\" title=\"django.forms.models.BaseInlineFormSet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BaseInlineFormSet</span></code></a> rather than\n<a class=\"reference internal\" href=\"#django.forms.models.BaseModelFormSet\" title=\"django.forms.models.BaseModelFormSet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BaseModelFormSet</span></code></a>.</p>\n<p>Sebagai contoh, jika anda ingin menimpa <code class=\"docutils literal notranslate\"><span class=\"pre\">clean()</span></code>:</p>\n<div class=\"code-block\" data-language=\"python\"><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.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">BaseInlineFormSet</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CustomInlineFormSet</span><span class=\"p\">(</span><span class=\"n\">BaseInlineFormSet</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">clean</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">clean</span><span class=\"p\">()</span>\n        <span class=\"c1\"># example custom validation across forms in the formset</span>\n        <span class=\"k\">for</span> <span class=\"n\">form</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">forms</span><span class=\"p\">:</span>\n            <span class=\"c1\"># your custom formset validation</span>\n            <span class=\"o\">...</span>\n</code></pre></div>\n<p>Lihat juga <a class=\"reference internal\" href=\"#model-formsets-overriding-clean\"><span class=\"std std-ref\">Menimpa clean() pada sebuah ModelFormSet</span></a>.</p>\n<p>Kemudian ketika anda membuat formset berderet anda, lewatkan di argumen pilihan <code class=\"docutils literal notranslate\"><span class=\"pre\">formset</span></code>:</p>\n<div class=\"code-block\" data-language=\"python\"><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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">inlineformset_factory</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">BookFormSet</span> <span class=\"o\">=</span> <span class=\"n\">inlineformset_factory</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">Book</span><span class=\"p\">,</span> <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s1\">&#39;title&#39;</span><span class=\"p\">,),</span>\n<span class=\"gp\">... </span>    <span class=\"n\">formset</span><span class=\"o\">=</span><span class=\"n\">CustomInlineFormSet</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Mike Royko&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">formset</span> <span class=\"o\">=</span> <span class=\"n\">BookFormSet</span><span class=\"p\">(</span><span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">author</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"more-than-one-foreign-key-to-the-same-model\">\n<h3>Lebih dari satu foreign key pada model sama<a class=\"heading-anchor\" href=\"#more-than-one-foreign-key-to-the-same-model\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>If your model contains more than one foreign key to the same model, you'll\nneed to resolve the ambiguity manually using <code class=\"docutils literal notranslate\"><span class=\"pre\">fk_name</span></code>. For example, consider\nthe following model:</p>\n<div class=\"code-block\" data-language=\"python\"><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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Friendship</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">from_friend</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n        <span class=\"n\">Friend</span><span class=\"p\">,</span>\n        <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n        <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;from_friends&#39;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">to_friend</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n        <span class=\"n\">Friend</span><span class=\"p\">,</span>\n        <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n        <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;friends&#39;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">length_in_months</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Untuk mengatasi ini, anda dapat menggunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">fk_name</span></code> pada <a class=\"reference internal\" href=\"/id/4.0/ref/forms/models/#django.forms.models.inlineformset_factory\" title=\"django.forms.models.inlineformset_factory\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">inlineformset_factory()</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"python\"><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=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">FriendshipFormSet</span> <span class=\"o\">=</span> <span class=\"n\">inlineformset_factory</span><span class=\"p\">(</span><span class=\"n\">Friend</span><span class=\"p\">,</span> <span class=\"n\">Friendship</span><span class=\"p\">,</span> <span class=\"n\">fk_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;from_friend&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s1\">&#39;to_friend&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;length_in_months&#39;</span><span class=\"p\">))</span>\n</code></pre></div>\n</section>\n<section id=\"using-an-inline-formset-in-a-view\">\n<h3>Menggunakan formset berderet di sebuah tampilan<a class=\"heading-anchor\" href=\"#using-an-inline-formset-in-a-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>You may want to provide a view that allows a user to edit the related objects\nof a model. Here's how you can do that:</p>\n<div class=\"code-block\" data-language=\"python\"><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=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">manage_books</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">author_id</span><span class=\"p\">):</span>\n    <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">author_id</span><span class=\"p\">)</span>\n    <span class=\"n\">BookInlineFormSet</span> <span class=\"o\">=</span> <span class=\"n\">inlineformset_factory</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">Book</span><span class=\"p\">,</span> <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s1\">&#39;title&#39;</span><span class=\"p\">,))</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=\"s2\">&quot;POST&quot;</span><span class=\"p\">:</span>\n        <span class=\"n\">formset</span> <span class=\"o\">=</span> <span class=\"n\">BookInlineFormSet</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">author</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">formset</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"n\">formset</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"c1\"># Do something. Should generally end with a redirect. For example:</span>\n            <span class=\"k\">return</span> <span class=\"n\">HttpResponseRedirect</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">formset</span> <span class=\"o\">=</span> <span class=\"n\">BookInlineFormSet</span><span class=\"p\">(</span><span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">author</span><span class=\"p\">)</span>\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;manage_books.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;formset&#39;</span><span class=\"p\">:</span> <span class=\"n\">formset</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>Perhatikan bagaimana kami melewatkan <code class=\"docutils literal notranslate\"><span class=\"pre\">instance</span></code> dalam kedua kasus <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code>.</p>\n</section>\n<section id=\"specifying-widgets-to-use-in-the-inline-form\">\n<h3>Menentukan widget-widget untuk digunakan di formulir berderet<a class=\"heading-anchor\" href=\"#specifying-widgets-to-use-in-the-inline-form\"><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\">inlineformset_factory</span></code> menggunakan  <code class=\"docutils literal notranslate\"><span class=\"pre\">modelformset_factory</span></code> dan melewatkan kebanyakan argumennya ke <code class=\"docutils literal notranslate\"><span class=\"pre\">modelformset_factory</span></code>. Ini berarti anda dapat menggunakan parameter <code class=\"docutils literal notranslate\"><span class=\"pre\">widgets</span></code> dalam banyak cara yang sama ketika melewatkan itu ke <code class=\"docutils literal notranslate\"><span class=\"pre\">modelformset_factory</span></code>. Lihat <a class=\"reference internal\" href=\"#specifying-widgets-to-use-in-the-form-with-widgets\">Specifying widgets to use in the form with widgets</a> diatas.</p>\n</section>\n</section>","rootId":"creating-forms-from-models","toc":[{"title":"ModelForm","anchor":"modelform","children":[{"title":"Jenis bidang","anchor":"field-types","children":[]},{"title":"Sebuah contoh penuh","anchor":"a-full-example","children":[]},{"title":"Pengesahan pada sebuah ModelForm","anchor":"validation-on-a-modelform","children":[{"title":"Menimpa metode clean()","anchor":"overriding-the-clean-method","children":[]},{"title":"Interaksi dengan pengecekan model","anchor":"interaction-with-model-validation","children":[]},{"title":"Pertimbangan mengenai error_messages model","anchor":"considerations-regarding-model-s-error-messages","children":[]}]},{"title":"Cara save()","anchor":"the-save-method","children":[]},{"title":"Memilih bidang untuk digunakan","anchor":"selecting-the-fields-to-use","children":[]},{"title":"Mengesampingan nilai awal","anchor":"overriding-the-default-fields","children":[]},{"title":"Mengadakan lokalisasi bidang","anchor":"enabling-localization-of-fields","children":[]},{"title":"Warisan formulir","anchor":"form-inheritance","children":[]},{"title":"Menyediakan nilai awal","anchor":"providing-initial-values","children":[]},{"title":"Fungsi pabrik ModelForm","anchor":"modelform-factory-function","children":[]}]},{"title":"Model formsets","anchor":"model-formsets","children":[{"title":"Merubah queryset","anchor":"changing-the-queryset","children":[]},{"title":"Merubah formulir","anchor":"changing-the-form","children":[]},{"title":"Menentukan widget yang digunakan dalam formulir dengan widgets","anchor":"specifying-widgets-to-use-in-the-form-with-widgets","children":[]},{"title":"Mengadakan lokalisasi untuk bidang dengan localized_fields","anchor":"enabling-localization-for-fields-with-localized-fields","children":[]},{"title":"Menyediakan nilai awal","anchor":"id2","children":[]},{"title":"Saving objects in the formset","anchor":"saving-objects-in-the-formset","children":[]},{"title":"Membatasi angka dari obyek dapat di sunting","anchor":"limiting-the-number-of-editable-objects","children":[]},{"title":"Using a model formset in a view","anchor":"using-a-model-formset-in-a-view","children":[]},{"title":"Menimpa clean() pada sebuah ModelFormSet","anchor":"overriding-clean-on-a-modelformset","children":[]},{"title":"Menggunakan queryset penyesuaian","anchor":"using-a-custom-queryset","children":[]},{"title":"Menggunakan formset dalam cetakan","anchor":"using-the-formset-in-the-template","children":[]}]},{"title":"Formset berderet","anchor":"inline-formsets","children":[{"title":"Metode menimpa pada InlineFormSet","anchor":"overriding-methods-on-an-inlineformset","children":[]},{"title":"Lebih dari satu foreign key pada model sama","anchor":"more-than-one-foreign-key-to-the-same-model","children":[]},{"title":"Menggunakan formset berderet di sebuah tampilan","anchor":"using-an-inline-formset-in-a-view","children":[]},{"title":"Menentukan widget-widget untuk digunakan di formulir berderet","anchor":"specifying-widgets-to-use-in-the-inline-form","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Menggunakan Django","url":"/id/4.0/topics/"},{"docname":"topics/forms/index","title":"Bekerja dengan formulir","url":"/id/4.0/topics/forms/"}],"prev":{"docname":"topics/forms/formsets","title":"Formset","url":"/id/4.0/topics/forms/formsets/"},"next":{"docname":"topics/forms/media","title":"Aset Formulir (kelas Media)","url":"/id/4.0/topics/forms/media/"},"formats":{"html":"/id/4.0/topics/forms/modelforms/","markdown":"/id/4.0/topics/forms/modelforms.md","json":"/id/4.0/topics/forms/modelforms.json"},"source":"https://github.com/django/django/blob/stable/4.0.x/docs/topics/forms/modelforms.txt","official":"https://docs.djangoproject.com/id/4.0/topics/forms/modelforms/","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"]}