{"title":"Menulis aplikasi Django kedua anda, bagian 7","version":"6.1","locale":"id","docname":"intro/tutorial07","url":"/id/6.1/intro/tutorial07/","canonical":"https://djangodocs.dev/id/6.1/intro/tutorial07/","summary":"Tutorial ini memulai dimana Tutorial 6 ditinggalkan. Kami sedang melanjutkan aplikasi poling-jaringan dan akan fokus pada menyesuaikan pembangkitan otomatis…","html":"<h1>Menulis aplikasi Django kedua anda, bagian 7<a class=\"heading-anchor\" href=\"#writing-your-first-django-app-part-7\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Tutorial ini memulai dimana <a class=\"reference internal\" href=\"/id/6.1/intro/tutorial06/\"><span class=\"doc\">Tutorial 6</span></a> ditinggalkan. Kami sedang melanjutkan aplikasi poling-jaringan dan akan fokus pada menyesuaikan pembangkitan otomatis situs admin Django yang pertama kami jelajahi dalam in <a class=\"reference internal\" href=\"/id/6.1/intro/tutorial02/\"><span class=\"doc\">Tutorial 2</span></a>.</p>\n<aside class=\"admonition-where-to-get-help admonition\" role=\"note\">\n<p class=\"admonition-title\">Dimana mendapatkan bantuan:</p>\n<p>Jika anda memiliki masalah melalui tutorial ini, harap geser ke <a class=\"reference internal\" href=\"/id/6.1/faq/help/\"><span class=\"doc\">Getting Help</span></a> bagian dari FAQ.</p>\n</aside>\n<section id=\"customize-the-admin-form\">\n<h2>Sesuaikan bentuk admin<a class=\"heading-anchor\" href=\"#customize-the-admin-form\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Dengan mendaftarkan model <code class=\"docutils literal notranslate\">Question</code> dengan <code class=\"docutils literal notranslate\">admin.site.register(Question)</code>, Django dapat membangun bentuk perwakilan awal. Sering, anda akan menginginkan menyesuaikan bagaimana bentuk admin kelihatan dan bekerja. Anda akan melakukan ini dengan memberitahu Django pilihan anda ingin ketika anda mendaftar obyek.</p>\n<p>Mari kita lihat bagaimana ini bekerja dengan mengurutkan kembali bidang di formulir sunting. Ganti baris <code class=\"docutils literal notranslate\">admin.site.register(Question)</code> dengan:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">polls/admin.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"kn\">import</span> Question\n\n\n<span class=\"k\">class</span> <span class=\"nc\">QuestionAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    fields <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;question_text&quot;</span><span class=\"p\">]</span>\n\n\nadmin<span class=\"o\">.</span>site<span class=\"o\">.</span>register<span class=\"p\">(</span>Question<span class=\"p\">,</span> QuestionAdmin<span class=\"p\">)</span>\n</code></pre></figure>\n<p>Anda akan mengikuti corak ini -- buat sebuah kelas admin model, kemudian lewati dia sebagai argumen kedua ke <code class=\"docutils literal notranslate\">admin.site.register()</code> -- setiap saat anda butuh merubah pilihan admin untuk sebuah model.</p>\n<p>Perubahan khusus ini diatas membuat &quot;Tanggal penerbitan&quot; datang sebelum bidang &quot;Pertanyaan&quot; :</p>\n<img alt=\"Bidang-bidang telah diurutkan kembali\" src=\"/id/6.1/_images/admin07.png\" />\n<p>Ini tidak hebat dengan hanya dua bidang, tetapi untuk bentuk admin dengan lusinan bidang, memilih urutan intuitif adalah rincian kegunaan penting.</p>\n<p>Dan berbicara formulir dengan lusinan bidang, anda mungkin ingin memisahkan formulir menjadi kumpulan bidang:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">polls/admin.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"kn\">import</span> Question\n\n\n<span class=\"k\">class</span> <span class=\"nc\">QuestionAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    fieldsets <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;question_text&quot;</span><span class=\"p\">]}),</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;Date information&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">]}),</span>\n    <span class=\"p\">]</span>\n\n\nadmin<span class=\"o\">.</span>site<span class=\"o\">.</span>register<span class=\"p\">(</span>Question<span class=\"p\">,</span> QuestionAdmin<span class=\"p\">)</span>\n</code></pre></figure>\n<p>Unsur pertama dari setiap tuple di <a class=\"reference internal\" href=\"/id/6.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.fieldsets\" title=\"django.contrib.admin.ModelAdmin.fieldsets\"><code class=\"xref py py-attr docutils literal notranslate\">fieldsets</code></a> adalah judul dari fieldset. Ini adalah apa formulir kami kelihatan seperti sekarang:</p>\n<img alt=\"Formulir sekarang mempunyai kumpulan bidang\" src=\"/id/6.1/_images/admin08t.png\" />\n</section>\n<section id=\"adding-related-objects\">\n<h2>Menambahkan obyek terhubung<a class=\"heading-anchor\" href=\"#adding-related-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>OKE, kami mempunyai halaman admin Pertanyaan, tetapi <code class=\"docutils literal notranslate\">Question</code> mempunyai banyak <code class=\"docutils literal notranslate\">Choice</code>, dan halaman admin tidak menampilkan pilihan.</p>\n<p>Masih.</p>\n<p>Ada dua cara menyelesaikan masalah ini. pertama adalah mendaftarkan <code class=\"docutils literal notranslate\">Choice</code> dengan admin seperti yang kami lakukan dengan <code class=\"docutils literal notranslate\">Question</code>:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">polls/admin.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"kn\">import</span> Choice<span class=\"p\">,</span> Question\n\n<span class=\"c1\"># ...</span>\nadmin<span class=\"o\">.</span>site<span class=\"o\">.</span>register<span class=\"p\">(</span>Choice<span class=\"p\">)</span>\n</code></pre></figure>\n<p>Sekarang &quot;Pilihan&quot; adalah pilihan tersedia di admin Django. Bentuk &quot;Tambah pilihan&quot; kelihatan seperti ini:</p>\n<img alt=\"Halaman admin pilihan\" src=\"/id/6.1/_images/admin09.png\" />\n<p>Di bentuk itu, bidang &quot;Pertanyaan&quot; adalah kotak pilih mengandung setiap pertanyaan di basisdata. Django mengetahui bahwa <a class=\"reference internal\" href=\"/id/6.1/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a> harus diwakilkan di admin sebagai kotal <code class=\"docutils literal notranslate\">&lt;select&gt;</code>. Di kasus kami, hanya satu pertanyaan ada di titik ini.</p>\n<p>Also note the &quot;Add another question&quot; button (displayed as a plus sign) to the\nright of the &quot;Question&quot; field. Every <code class=\"docutils literal notranslate\">ForeignKey</code> relationship gets this\nbutton for free. When you click this button, you'll get a popup window with the\n&quot;Add question&quot; form. If you add a question in that window and click &quot;Save&quot;,\nDjango will save the question to the database and dynamically add it as the\nselected choice on the &quot;Add choice&quot; form you're looking at.</p>\n<p>Tetapi, sungguh, ini bukan cara efisien dari menambahkan obyek <code class=\"docutils literal notranslate\">Choice</code> ke sistem. Akan lebih baik jika anda dapat menambahkan sekumpulan Pilihan langsung ketika anda membuat obyek <code class=\"docutils literal notranslate\">Question</code>. Mari kita membuatnya terjadi.</p>\n<p>Pindahkan pemanggilan <code class=\"docutils literal notranslate\">register()</code> untuk model <code class=\"docutils literal notranslate\">Choice</code>. Lalu, sunting kode pendaftaran <code class=\"docutils literal notranslate\">Question</code> untuk dibaca:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">polls/admin.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"kn\">import</span> Choice<span class=\"p\">,</span> Question\n\n\n<span class=\"k\">class</span> <span class=\"nc\">ChoiceInline</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>StackedInline<span class=\"p\">):</span>\n    model <span class=\"o\">=</span> Choice\n    extra <span class=\"o\">=</span> <span class=\"mi\">3</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">QuestionAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    fieldsets <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;question_text&quot;</span><span class=\"p\">]}),</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;Date information&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">],</span> <span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;collapse&quot;</span><span class=\"p\">]}),</span>\n    <span class=\"p\">]</span>\n    inlines <span class=\"o\">=</span> <span class=\"p\">[</span>ChoiceInline<span class=\"p\">]</span>\n\n\nadmin<span class=\"o\">.</span>site<span class=\"o\">.</span>register<span class=\"p\">(</span>Question<span class=\"p\">,</span> QuestionAdmin<span class=\"p\">)</span>\n</code></pre></figure>\n<p>Ini memberitahu Django: &quot;obyek <code class=\"docutils literal notranslate\">Choice</code> sedang disunting pada halaman admin <code class=\"docutils literal notranslate\">Question</code>. Secara awal, cukup menyediakan bidang untuk 3 pilihan.&quot;</p>\n<p>Muat halaman &quot;Tambahan pertanyaan&quot; untuk melihat bagaimana kelihatannya:</p>\n<img alt=\"Halaman tambah pertanyaan sekarang mempunyai pilihan didalamnya\" src=\"/id/6.1/_images/admin10t.png\" />\n<p>Dia bekerja seperti ini: Terdapat tiga bagian untuk Pilihan terhubung -- sesuai ditentukan oleh <code class=\"docutils literal notranslate\">extra</code> -- dan setiap waktu anda kembali ke halaman &quot;Rubah&quot; untuk obyek sudah-sibuat, anda mendapatkan tiga ekstra bagian lain.</p>\n<p>At the end of the three current slots you will find an &quot;Add another Choice&quot;\nlink. If you click on it, a new slot will be added. If you want to remove the\nadded slot, you can click on the X to the top right of the added slot. This\nimage shows an added slot:</p>\n<img alt=\"Tempat tambahan ditambahkan secara dinamis\" src=\"/id/6.1/_images/admin14t.png\" />\n<p>Satu masalah kecil, meskipun. Itu mengambil banyak lahan layar untuk menampilkan semua bidang untuk memasukkan objek <code class=\"docutils literal notranslate\">Choice</code> terkait. Untuk alasan itu, Django menawarkan cara datar dari menampilkan objek terkait di barisan. Untuk menggunakan itu, rubah pernyataan  <code class=\"docutils literal notranslate\">ChoiceInline</code> untuk membaca:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">polls/admin.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"k\">class</span> <span class=\"nc\">ChoiceInline</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>TabularInline<span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></figure>\n<p>Dengan <code class=\"docutils literal notranslate\">TabularInline</code> (daripada <code class=\"docutils literal notranslate\">StackedInline</code>), obyek terhubung ditampilkan lebih rapat, bentuk berbasiskan-tabel:</p>\n<img alt=\"Halaman tambah pertanyaan sekarang mempunyai lebih pilihan ringkas\" src=\"/id/6.1/_images/admin11t.png\" />\n<p>Catat bahwa ada tambahan &quot;Hapus?&quot; kolom yang mengizinkan memindahkan baris ditambahkan menggunakan tombol &quot;Tambah Pilihan lain&quot; dan baris yang sudah disimpan.</p>\n</section>\n<section id=\"customize-the-admin-change-list\">\n<h2>Sesuaiakan daftar perubahan admin<a class=\"heading-anchor\" href=\"#customize-the-admin-change-list\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Sekarang bahwa halaman admin Question kelihatan bagus, mari kita membuat beberapa perubahan untuk &quot;daftar rubah&quot; halaman -- satu yang menampilkan semua pertanyaan di sistem.</p>\n<p>Inilah yang terlihat seperti pada saat ini:</p>\n<img alt=\"Halaman daftar rubah pemungutan suara\" src=\"/id/6.1/_images/admin04t.png\" />\n<p>By default, Django displays the <code class=\"docutils literal notranslate\">str()</code> of each object. But sometimes it'd be\nmore helpful if we could display individual fields. To do that, use the\n<a class=\"reference internal\" href=\"/id/6.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display\" title=\"django.contrib.admin.ModelAdmin.list_display\"><code class=\"xref py py-attr docutils literal notranslate\">list_display</code></a> admin option, which is a\nlist of field names to display, as columns, on the change list page for the\nobject:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">polls/admin.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"k\">class</span> <span class=\"nc\">QuestionAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    list_display <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;question_text&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">]</span>\n</code></pre></figure>\n<p>Untuk ukuran terbaik, mari juta juga sertakan metode <code class=\"docutils literal notranslate\">was_published_recently()</code> dari <a class=\"reference internal\" href=\"/id/6.1/intro/tutorial02/\"><span class=\"doc\">Tutorial 2</span></a>:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">polls/admin.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"k\">class</span> <span class=\"nc\">QuestionAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    list_display <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;question_text&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;was_published_recently&quot;</span><span class=\"p\">]</span>\n</code></pre></figure>\n<p>Sekarang pertanyaan halaman daftar perubahan kelihatan seperti ini:</p>\n<img alt=\"Halaman daftar rubah pemungutan suara, diperbaharui\" src=\"/id/6.1/_images/admin12t.png\" />\n<p>Anda dapat meng klik di kepala kolom untuk mengurutkan nilai tersebut -- kecuali di kasus kepala <code class=\"docutils literal notranslate\">was_published_recently</code>, karena mengurutkan berdasarkan keluaran dari cara sewenang-wenang tidak didukung. Juga catat bahwa kepala kolom untuk <code class=\"docutils literal notranslate\">was_published_recently</code> adalah, secara awal, nama dari cara (dengan garis bawah ditandai dengan spasi), dan setiap baris mengandung string mewakili dari keluaran.</p>\n<p>You can improve that by using the <a class=\"reference internal\" href=\"/id/6.1/ref/contrib/admin/#django.contrib.admin.display\" title=\"django.contrib.admin.display\"><code class=\"xref py py-func docutils literal notranslate\">display()</code></a>\ndecorator on that method (extending the <code class=\"file docutils literal notranslate\">polls/models.py</code> file that was\ncreated in <a class=\"reference internal\" href=\"/id/6.1/intro/tutorial02/\"><span class=\"doc\">Tutorial 2</span></a>), as follows:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">polls/models.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Question</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"nd\">@admin</span><span class=\"o\">.</span>display<span class=\"p\">(</span>\n        boolean<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        ordering<span class=\"o\">=</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">,</span>\n        description<span class=\"o\">=</span><span class=\"s2\">&quot;Published recently?&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"k\">def</span> <span class=\"nf\">was_published_recently</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        now <span class=\"o\">=</span> timezone<span class=\"o\">.</span>now<span class=\"p\">()</span>\n        <span class=\"k\">return</span> now <span class=\"o\">-</span> datetime<span class=\"o\">.</span>timedelta<span class=\"p\">(</span>days<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">&lt;=</span> <span class=\"bp\">self</span><span class=\"o\">.</span>pub_date <span class=\"o\">&lt;=</span> now\n</code></pre></figure>\n<p>Untuk informasi lebih pada properti yang dapat dikonfigurasikan melalui penghias lihat <a class=\"reference internal\" href=\"/id/6.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display\" title=\"django.contrib.admin.ModelAdmin.list_display\"><code class=\"xref py py-attr docutils literal notranslate\">list_display</code></a>.</p>\n<p>Sunting berkas <code class=\"file docutils literal notranslate\">polls/admin.py</code> anda kembali dan tambah perbaikan ke halaman daftar perubahan <code class=\"docutils literal notranslate\">Question</code> : saringan menggunakan <a class=\"reference internal\" href=\"/id/6.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter\" title=\"django.contrib.admin.ModelAdmin.list_filter\"><code class=\"xref py py-attr docutils literal notranslate\">list_filter</code></a>. Tambah baris berikut ke <code class=\"docutils literal notranslate\">QuestionAdmin</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>list_filter <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Itu menambahkan batang sisi &quot;Saringan&quot; yang membiarkan orang menyaring daftar perubahan dengan bidang <code class=\"docutils literal notranslate\">pub_date</code>:</p>\n<img alt=\"Halaman daftar rubah pemungutan suara, diperbaharui\" src=\"/id/6.1/_images/admin13t.png\" />\n<p>Jenis dari saringan ditampilkan tergantung pada jenis dari bidang anda saringkan. karena <code class=\"docutils literal notranslate\">pub_date</code> adalah sebuah <a class=\"reference internal\" href=\"/id/6.1/ref/models/fields/#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\">DateTimeField</code></a>, Django mengetahui untuk memberikan pilihan saringan sesuai: &quot;Tanggal kapanpun&quot;, &quot;7 hari terakhir&quot;,&quot; Bulan ini&quot;, &quot;Tahun ini&quot;.</p>\n<p>Ini adalah pembentukan baik. Mari kita menambahkan beberapa kemampuan pencarian</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>search_fields <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;question_text&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Itu menambah kotak pencarian di bagian atas dari daftar rubah. Ketika seseorang memasukkan istilah pencarian, Django akan mencari bidang <code class=\"docutils literal notranslate\">question_text</code>. Anda dapat menggunakan sebanyak bidang anda suka -- meskipun karena itu menggunakan query <code class=\"docutils literal notranslate\">LIKE</code> dibelakang layar, membatasi angka bidan gpencarian untuk angka yang beralasan akan membuatnya mudah bagi basisdata anda melakukan pencarian.</p>\n<p>Now's also a good time to note that change lists give you free pagination. The\ndefault is to display 100 items per page.</p>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">Lihat juga</p>\n<p>The following <a class=\"reference internal\" href=\"/id/6.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">ModelAdmin</code></a> options allow\nfurther customization of change lists:\n<a class=\"reference internal\" href=\"/id/6.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_per_page\" title=\"django.contrib.admin.ModelAdmin.list_per_page\"><code class=\"xref py py-attr docutils literal notranslate\">list_per_page</code></a>,\n<a class=\"reference internal\" href=\"/id/6.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.search_fields\" title=\"django.contrib.admin.ModelAdmin.search_fields\"><code class=\"xref py py-attr docutils literal notranslate\">search_fields</code></a>,\n<a class=\"reference internal\" href=\"/id/6.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.date_hierarchy\" title=\"django.contrib.admin.ModelAdmin.date_hierarchy\"><code class=\"xref py py-attr docutils literal notranslate\">date_hierarchy</code></a>, and\n<a class=\"reference internal\" href=\"/id/6.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display\" title=\"django.contrib.admin.ModelAdmin.list_display\"><code class=\"xref py py-attr docutils literal notranslate\">list_display</code></a>.</p>\n</aside>\n</section>\n<section id=\"customize-the-admin-look-and-feel\">\n<h2>Sesuaikan admin lihat dan rasakan<a class=\"heading-anchor\" href=\"#customize-the-admin-look-and-feel\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Jelas, mempunyai &quot;Administrasi Django&quot; pada atas dari setiap halaman admin adalah menggelikan. Itu adalah hanya teks placeholder.</p>\n<p>Anda dapat merubahnya, meskipun, menggunakan sistem cetakan Django. Admin Django ditenagai oleh Django itu sendiri, dan antarmukanya menggunakan sistem cetakan Django sendiri.</p>\n<section id=\"customizing-your-project-s-templates\">\n<span id=\"ref-customizing-your-projects-templates\"></span><h3>Menyesuaikan cetakan <em>proyek</em> anda<a class=\"heading-anchor\" href=\"#customizing-your-project-s-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Create a <code class=\"docutils literal notranslate\">templates</code> directory in your <code class=\"docutils literal notranslate\">djangotutorial</code> directory.\nTemplates can live anywhere on your filesystem that Django can access. (Django\nruns as whatever user your server runs.) However, keeping your templates within\nthe project is a good convention to follow.</p>\n<p>Buka berkas pengaturan anda (<code class=\"file docutils literal notranslate\">mysite/settings.py</code>, ingat) dan tambah pilihan <a class=\"reference internal\" href=\"/id/6.1/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">DIRS</code></a> di pengaturan <a class=\"reference internal\" href=\"/id/6.1/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> :</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">mysite/settings.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code>TEMPLATES <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;BACKEND&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.template.backends.django.DjangoTemplates&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;DIRS&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>BASE_DIR <span class=\"o\">/</span> <span class=\"s2\">&quot;templates&quot;</span><span class=\"p\">],</span>\n        <span class=\"s2\">&quot;APP_DIRS&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;OPTIONS&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;context_processors&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n                <span class=\"s2\">&quot;django.template.context_processors.request&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;django.contrib.auth.context_processors.auth&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;django.contrib.messages.context_processors.messages&quot;</span><span class=\"p\">,</span>\n            <span class=\"p\">],</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p><a class=\"reference internal\" href=\"/id/6.1/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">DIRS</code></a> adalah daftar dari direktori sistem berkas untuk memeriksa ketika memuat cetakan Django; dia adalah jalur pencarian.</p>\n<aside class=\"admonition-organizing-templates admonition\" role=\"note\">\n<p class=\"admonition-title\">Mengatur cetakan</p>\n<p>Sama seperti berkas-berkas tetap, kami <em>dapat</em> mempunyai semua cetakan bersama-sama, dalam satu direktori cetakan besar, dan itu akan bekerja sempurna. Bagaimanapun, cetakan-cetakan yang milik aplikasi tertentu harus ditempatkan dalam direktori cetakan aplikasi (contoh <code class=\"docutils literal notranslate\">polls/templates</code>) daripada (<code class=\"docutils literal notranslate\">templates</code>) proyek. Kami akan mengobrolkan lebih rinci dalam  :doc:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>reusable apps tutorial ` <em>mengapa</em> kami melakukan ini.</p>\n</aside>\n<p>Now create a directory called <code class=\"docutils literal notranslate\">admin</code> inside <code class=\"docutils literal notranslate\">templates</code>, and copy the\ntemplate <code class=\"docutils literal notranslate\">admin/base_site.html</code> from within the default Django admin\ntemplate directory in the source code of Django itself\n(<a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/6.1.x/django/contrib/admin/templates\">django/contrib/admin/templates</a>) into that directory.</p>\n<aside class=\"admonition-where-are-the-django-source-files admonition\" role=\"note\">\n<p class=\"admonition-title\">Dimana berkas sumber Django?</p>\n<p>Jika anda mempunyai kesulitan dimana berkas sumber Django ditempatkan di sistem anda, jalankan perintah berikut:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-0-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python -c <span class=\"s2\">&quot;import django; print(django.__path__)&quot;</span>\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-0-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py -c <span class=\"s2\">&quot;import django; print(django.__path__)&quot;</span>\n</code></pre></div></div></div>\n</aside>\n<p>Kemudian, sunting berkas dan ganti <code class=\"docutils literal notranslate\">{{ site_header|default:_('Django administration') }}</code> (termasuk tanda buka kurung bergelombang) dengan nama situs anda sendiri untuk melihatnya cocok. Anda akan berakhir dengan bagian seperti kode:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">branding</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;site-name&quot;</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"s1\">&#39;admin:index&#39;</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>Polls Administration<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">user.is_anonymous</span> <span class=\"cp\">%}</span>\n  <span class=\"cp\">{%</span> <span class=\"k\">include</span> <span class=\"s2\">&quot;admin/color_theme_toggle.html&quot;</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Kami menggunakan pendekatan ini untuk mengajarkan anda bagaimana menimpa cetakan. Di proyek sesungguhnya, anda mungkin menggunakan atribut <a class=\"reference internal\" href=\"/id/6.1/ref/contrib/admin/#django.contrib.admin.AdminSite.site_header\" title=\"django.contrib.admin.AdminSite.site_header\"><code class=\"xref py py-attr docutils literal notranslate\">django.contrib.admin.AdminSite.site_header</code></a> untuk lebih mudah membuat penyesuaian tertentu.</p>\n<p>Berkas cetakan ini mengandung banyak teks seperti <code class=\"docutils literal notranslate\">{% block branding %}</code> dan <code class=\"docutils literal notranslate\">{{ title }}</code>. Etiket <code class=\"docutils literal notranslate\">{%</code> dan <code class=\"docutils literal notranslate\">{{</code> adalah bagian dari bahasa cetakan Django. Ketika Django membangun <code class=\"docutils literal notranslate\">admin/base_site.html</code>, bahasa cetakan akan menilai untuk menghasilkan halaman HTML akhir, sama seeprti kami lihat di <a class=\"reference internal\" href=\"/id/6.1/intro/tutorial03/\"><span class=\"doc\">Tutorial 3</span></a>.</p>\n<p>Catat bahwa cetakan admin awalan Django dapat ditimpa. Untuk menimpa cetakan, lakukan hal sama anda lakukan dengan <code class=\"docutils literal notranslate\">base_site.html</code> -- salin itu dari direktori awalan kedalam direktori penyesuaian anda, dan buat perubahan.</p>\n</section>\n<section id=\"customizing-your-application-s-templates\">\n<h3>Menyesuaikan cetakan <em>aplikasi</em> anda<a class=\"heading-anchor\" href=\"#customizing-your-application-s-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Pembaca cerdik akan bertanya: Tetapi jika <a class=\"reference internal\" href=\"/id/6.1/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">DIRS</code></a> kosong secara awal, bagaimana Django menemukan cetakan admin awal? Jawabannya adalah, sejak <a class=\"reference internal\" href=\"/id/6.1/ref/settings/#std-setting-TEMPLATES-APP_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">APP_DIRS</code></a> disetel ke <code class=\"docutils literal notranslate\">True</code>, Django otomatis mencari subdirektori <code class=\"docutils literal notranslate\">templates/</code> dalam setiap paket aplikasi, untuk digunakan sebagai kembali (jangan lupa bahwa <code class=\"docutils literal notranslate\">django.contrib.admin</code> adalah sebuah aplikasi).</p>\n<p>Aplikasi jejak pendapat kami tidak sangat rumit dan tidak butuh penyesuaian cetakan admin. Tetapi jika itu tumbuh lebih mutkahir dan membutuhkan perubahan dari cetakan admin standar Django untuk beberapa fungsinya, itu akan lebih bijaksana untuk merubah cetakan <em>aplikasi</em>, daripada itu di <em>proyek</em>. Lewat situ, anda dapat menyertakan aplikasi jejak pendapat di proyek baru apapun dan terjamin bahwa dia akan menemukan cetakan penyesuaian dia butuhkan.</p>\n<p>Lihat <a class=\"reference internal\" href=\"/id/6.1/topics/templates/#template-loading\"><span class=\"std std-ref\">dokumentasi memuat cetakan</span></a> untuk informasi lebih tentang bagaimana Django menemukan cetakannya.</p>\n</section>\n</section>\n<section id=\"customize-the-admin-index-page\">\n<h2>Sesuaikan halaman index admin<a class=\"heading-anchor\" href=\"#customize-the-admin-index-page\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Pada catatan sama, anda mungkin ingin menyesuaikan penampilan dan rasa dari halaman index admin Django.</p>\n<p>Secara awal, dia menampilkan semua aplikasi di <a class=\"reference internal\" href=\"/id/6.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> yang telah didaftarkan dengan aplikasi admin, dalam urutan alfabet. Anda mungkin ingin membuat perubahan signifikan pada tata letak. Lagi pula, index mungkin halaman paling penting dari admin, dan dia harus mudah digunakan.</p>\n<p>The template to customize is <code class=\"docutils literal notranslate\">admin/index.html</code>. (Do the same as with\n<code class=\"docutils literal notranslate\">admin/base_site.html</code> in the previous section -- copy it from the default\ndirectory to your custom template directory). Edit the file, and you'll see it\nuses a template variable called <code class=\"docutils literal notranslate\">app_list</code>. That variable contains every\ninstalled Django app. Instead of using that, you can hardcode links to\nobject-specific admin pages in whatever way you think is best.</p>\n<p>When you're comfortable with the admin, read <a class=\"reference internal\" href=\"/id/6.1/intro/tutorial08/\"><span class=\"doc\">part 8 of this\ntutorial</span></a> to learn how to use third-party packages.</p>\n</section>","rootId":"writing-your-first-django-app-part-7","toc":[{"title":"Sesuaikan bentuk admin","anchor":"customize-the-admin-form","children":[]},{"title":"Menambahkan obyek terhubung","anchor":"adding-related-objects","children":[]},{"title":"Sesuaiakan daftar perubahan admin","anchor":"customize-the-admin-change-list","children":[]},{"title":"Sesuaikan admin lihat dan rasakan","anchor":"customize-the-admin-look-and-feel","children":[{"title":"Menyesuaikan cetakan proyek anda","anchor":"customizing-your-project-s-templates","children":[]},{"title":"Menyesuaikan cetakan aplikasi anda","anchor":"customizing-your-application-s-templates","children":[]}]},{"title":"Sesuaikan halaman index admin","anchor":"customize-the-admin-index-page","children":[]}],"breadcrumbs":[{"docname":"intro/index","title":"Mulai","url":"/id/6.1/intro/"}],"prev":{"docname":"intro/tutorial06","title":"Menulis aplikasi Django pertama anda, bagian 6","url":"/id/6.1/intro/tutorial06/"},"next":{"docname":"intro/tutorial08","title":"Writing your first Django app, part 8","url":"/id/6.1/intro/tutorial08/"},"formats":{"html":"/id/6.1/intro/tutorial07/","markdown":"/id/6.1/intro/tutorial07.md","json":"/id/6.1/intro/tutorial07.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/intro/tutorial07.txt","official":"https://docs.djangoproject.com/id/6.1/intro/tutorial07/","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","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}