{"title":"Menulis aplikasi Django kedua anda, bagian 2","version":"2.2","locale":"id","docname":"intro/tutorial02","url":"/id/2.2/intro/tutorial02/","canonical":"https://djangodocs.dev/id/2.2/intro/tutorial02/","summary":"Tutorial ini dimulai dimana Tutorial 1 tinggalkan. Kami akan mengatur basisdata, membuat model pertama anda, dan mendapatkan perkenalan cepat ke situs admin…","html":"<h1>Menulis aplikasi Django kedua anda, bagian 2<a class=\"heading-anchor\" href=\"#writing-your-first-django-app-part-2\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Tutorial ini dimulai dimana <a class=\"reference internal\" href=\"/id/2.2/intro/tutorial01/\"><span class=\"doc\">Tutorial 1</span></a> tinggalkan. Kami akan mengatur basisdata, membuat model pertama anda, dan mendapatkan perkenalan cepat ke situs admin dibangkitkan-otomatis Django.</p>\n<section id=\"database-setup\">\n<h2>Pengaturan basisdata<a class=\"heading-anchor\" href=\"#database-setup\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Sekarang, buka <code class=\"file docutils literal notranslate\">mysite/settings.py</code>. Dia adalah modul Phyton biasa dengan variabel tingkat-modul mewakili pengaturan Django.</p>\n<p>Secara awalan, konfiurasi menggunakan SQLite. Jika anda baru pada basisdata, atau anda hanya tertarik dalam mencoba Django, ini adalah pilihan termudah. SQlite disertakan di Python, jadi anda tidak butuh memasang apapun lagi untuk mendukung basisdata anda. Ketika memulai proyek pertama anda sesungguhnya, bagaimanapun, anda mungkin ingin menggunakan basisdata lebih dapat diukur seperti PostgreSQL, untuk menghindari pusing pertukarang-basisdata di jalan.</p>\n<p>Jika anda berharap menggunakan basisdata lain, pasang <a class=\"reference internal\" href=\"/id/2.2/topics/install/#database-installation\"><span class=\"std std-ref\">database bindings</span></a> yang sesuai dan rubah kunci berikut di barang <a class=\"reference internal\" href=\"/id/2.2/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\">DATABASES</code></a> <code class=\"docutils literal notranslate\">'default'</code> untuk mencocokkan pengaturan hubungan basisdata anda:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/id/2.2/ref/settings/#std-setting-DATABASE-ENGINE\"><code class=\"xref std std-setting docutils literal notranslate\">ENGINE</code></a> -- Salah satu <code class=\"docutils literal notranslate\">'django.db.backends.sqlite3'</code>, <code class=\"docutils literal notranslate\">'django.db.backends.postgresql'</code>, <code class=\"docutils literal notranslate\">'django.db.backends.mysql'</code>, atau <code class=\"docutils literal notranslate\">'django.db.backends.oracle'</code>. Backend lainnya adalah <a class=\"reference internal\" href=\"/id/2.2/ref/databases/#third-party-notes\"><span class=\"std std-ref\">juga tersedia</span></a>.</p></li>\n<li><p><a class=\"reference internal\" href=\"/id/2.2/ref/settings/#std-setting-NAME\"><code class=\"xref std std-setting docutils literal notranslate\">NAME</code></a> -- Nama dari basisdata anda. Jika anda menggunakan SQLite, basisdata akan di berkaskan di komputer anda; dalam kasus itu, <a class=\"reference internal\" href=\"/id/2.2/ref/settings/#std-setting-NAME\"><code class=\"xref std std-setting docutils literal notranslate\">NAME</code></a> harus jalur mutlak penuh, termasuk nama berkas, dari berkas tersebut. Nilai awal, <code class=\"docutils literal notranslate\">os.path.join(BASE_DIR, 'db.sqlite3')</code>, akan menyimpan berkas di direktori proyek anda.</p></li>\n</ul>\n<p>Jika anda tidak menggunakan SQlite sebagai basisdata anda, pengaturan tambahan seperti <a class=\"reference internal\" href=\"/id/2.2/ref/settings/#std-setting-USER\"><code class=\"xref std std-setting docutils literal notranslate\">USER</code></a>, <a class=\"reference internal\" href=\"/id/2.2/ref/settings/#std-setting-PASSWORD\"><code class=\"xref std std-setting docutils literal notranslate\">PASSWORD</code></a>, dan <a class=\"reference internal\" href=\"/id/2.2/ref/settings/#std-setting-HOST\"><code class=\"xref std std-setting docutils literal notranslate\">HOST</code></a> harus ditambahkan. Untuk lebih rinci, lihat acuan dukumentasi untuk <a class=\"reference internal\" href=\"/id/2.2/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\">DATABASES</code></a>.</p>\n<aside class=\"admonition-for-databases-other-than-sqlite admonition\" role=\"note\">\n<p class=\"admonition-title\">Untuk basis data selain SQLite.</p>\n<p>Jika anda menggunakan basisdata selain SQLite, pastikan anda membuat basisdata terlebih dahulu. Lakukan dengan &quot;<code class=\"docutils literal notranslate\">CREATE_DATABASE database_name;</code>&quot; melalui prompt interaktif basisdata.</p>\n<p>Juga pastikan bahwa basisdata yang disiapkan dalam <code class=\"file docutils literal notranslate\">mysite/settings.py</code> memiliki izin untuk &quot;membuat database&quot;. Hal ini memungkinkan untuk membuat <a class=\"reference internal\" href=\"/id/2.2/topics/testing/overview/#the-test-database\"><span class=\"std std-ref\">test database</span></a> yang akan dibutuhkan nanti dalam tutorial.</p>\n<p>Jika anda sedang menggunakan SQlite, anda tidak butuh membuat apapun sebelumnya - berkas basisdata akan dibuat otomatis ketika dia dibutuhkan.</p>\n</aside>\n<p>Ketika anda menyunting <code class=\"file docutils literal notranslate\">mysite/settings.py</code>, setel <a class=\"reference internal\" href=\"/id/2.2/ref/settings/#std-setting-TIME_ZONE\"><code class=\"xref std std-setting docutils literal notranslate\">TIME_ZONE</code></a> ke zona waktu anda.</p>\n<p>Juga, catat pengaturan <a class=\"reference internal\" href=\"/id/2.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> pada bagian atas berkas. Yang menahan nama dari semua aplikasi Django yang diaktifkan di instance Django. Aplikasi dapat digunakan d banyak proyek, dan anda dapat memaketkan dan menyebarkan mereka untuk digunakan oleh lainnya di proyek mereka.</p>\n<p>Secara awal, <a class=\"reference internal\" href=\"/id/2.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> mengandung aplikasi berikut, semua yang datang dengan Django:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/id/2.2/ref/contrib/admin/#module-django.contrib.admin\" title=\"django.contrib.admin: Django's admin site.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.admin</code></a> -- Situs admin. Anda akan menggunakannya segera.</p></li>\n<li><p><a class=\"reference internal\" href=\"/id/2.2/topics/auth/#module-django.contrib.auth\" title=\"django.contrib.auth: Django's authentication framework.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.auth</code></a> -- Sebuah sistem pembuktian keaslian.</p></li>\n<li><p><a class=\"reference internal\" href=\"/id/2.2/ref/contrib/contenttypes/#module-django.contrib.contenttypes\" title=\"django.contrib.contenttypes: Provides generic interface to installed models.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.contenttypes</code></a> -- Sebuah kerangka untuk jenis isi.</p></li>\n<li><p><a class=\"reference internal\" href=\"/id/2.2/topics/http/sessions/#module-django.contrib.sessions\" title=\"django.contrib.sessions: Provides session management for Django projects.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.sessions</code></a> -- Sebuah kerangka sesi.</p></li>\n<li><p>mod:django.contrib.messages -- Kerangka pesan.</p></li>\n<li><p><a class=\"reference internal\" href=\"/id/2.2/ref/contrib/staticfiles/#module-django.contrib.staticfiles\" title=\"django.contrib.staticfiles: An app for handling static files.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.staticfiles</code></a> -- Kerangka untuk mengelola berkas statis.</p></li>\n</ul>\n<p>Aplikasi ini disertakan secara awal sebagai kenyamanan untuk kasus umum.</p>\n<p>Beberapa aplikasi ini memanfaatkan setidaknya satu tabel basisdata, meskipun, jadi kami butuh untuk membuat tabel di basisdata sebelum kami dapat menggunakannya. Untuk melakukannya, 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 manage.py migrate\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 manage.py migrate\n</code></pre></div></div></div>\n<p>Perintah <a class=\"reference internal\" href=\"/id/2.2/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">migrate</code></a> mencari pengaturan <a class=\"reference internal\" href=\"/id/2.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> dan membuat tabel basisdata yang dibutuhkan menurut pengaturan basisdata di berkas <code class=\"file docutils literal notranslate\">mysite/settings.py</code> anda dan pemindahan basisdata dibungkus dengan aplikasi (kami akan menanganinya nanti). Anda akan melihat pesan untuk setiap pindahan yang diberlakukan. Jika anda tertarik, jalankan baris-perintah klien untuk basisdata anda dan ketik <code class=\"docutils literal notranslate\">\\dt</code> (PostgreSQL), <code class=\"docutils literal notranslate\">SHOW TABLES;</code> (MySQL), <code class=\"docutils literal notranslate\">.schema</code> (SQLite), atau <code class=\"docutils literal notranslate\">SELECT TABLE_NAME FROM USER_TABLES;</code> (Oracle) untuk menampilkan tabel Django yang dibuat.</p>\n<aside class=\"admonition-for-the-minimalists admonition\" role=\"note\">\n<p class=\"admonition-title\">Untuk minimalis</p>\n<p>Seperti yang kami katakan diatas, aplikasi awal disertakan untuk kasus umum, tetapi tidak setiap orang membutuhkan mereka. Jika anda tidak membutuhkan sebagian atau semua dari mereka, silahkan komentari atau hapus baris yang diinginkan dari <a class=\"reference internal\" href=\"/id/2.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> sebelum menjalankan <a class=\"reference internal\" href=\"/id/2.2/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">migrate</code></a>. Perintah <a class=\"reference internal\" href=\"/id/2.2/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">migrate</code></a> akan hanya menjalankan pemindahan tempat untuk aplikasi di <a class=\"reference internal\" href=\"/id/2.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>.</p>\n</aside>\n</section>\n<section id=\"creating-models\">\n<span id=\"id1\"></span><h2>Membuat model<a class=\"heading-anchor\" href=\"#creating-models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Sekarang kami akan menentukan model anda -- Pada dasarnya, tata letak basisdata anda, dengan metadata tambahan.</p>\n<aside class=\"admonition-philosophy admonition\" role=\"note\">\n<p class=\"admonition-title\">Filosofi</p>\n<p>Sebuah model adalah tunggal, sumber tetap dari kebenaran tentang data anda. Itu mengandung bidang penting dan kebiasaan dari data anda simpan. Django mengikuti <a class=\"reference internal\" href=\"/id/2.2/misc/design-philosophies/#dry\"><span class=\"std std-ref\">DRY Principle</span></a>. Tujuan adalah menentukan model data anda di satu tempat dan otomatis mengambil hal dari itu.</p>\n<p>Ini menyertakan pemindahan tempat - tidak seperti Ruby On Rails, sebagai contoh, pemindahan tempat seluruhnya turunan dari berkas model anda, dan pada dasarnya hanya sejarah yang Django dapat gulirkan untuk memperbaharui skema basisdata anda untuk mencocokan model anda saat ini.</p>\n</aside>\n<p>Di aplikasi jejak pendapat sederhana kami, kami akan membuat dua model <code class=\"docutils literal notranslate\">Question</code> and <code class=\"docutils literal notranslate\">Choice</code>. <code class=\"docutils literal notranslate\">Question</code> mempunyai pertannyaan dan tanggal penerbitan. <code class=\"docutils literal notranslate\">Choice</code> mempunyai dua bidang: teks pilihan dan perhitungan pilihan. Setiap <code class=\"docutils literal notranslate\">Choice</code> dihubungkan dengan <code class=\"docutils literal notranslate\">Question</code>.</p>\n<p>Konsep ini diwakili dengan kelas Phyton sederhana. Rubah berkas <code class=\"file docutils literal notranslate\">polls/models.py</code> sehingga itu kelihtan seperti ini:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">polls/models.py</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.db</span> <span class=\"kn\">import</span> models\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    question_text <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    pub_date <span class=\"o\">=</span> models<span class=\"o\">.</span>DateTimeField<span class=\"p\">(</span><span class=\"s1\">&#39;date published&#39;</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Choice</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    question <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>Question<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n    choice_text <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    votes <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">(</span>default<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>Kode ini langsung. Setiap model diwakili oleh kelas yang subkelas <a class=\"reference internal\" href=\"/id/2.2/ref/models/instances/#django.db.models.Model\" title=\"django.db.models.Model\"><code class=\"xref py py-class docutils literal notranslate\">django.db.models.Model</code></a>. Setiap model mempunyai angka variabel kelas, setiap yang mewakilkan bidang basisdata di model.</p>\n<p>Setiap bidang diwakilkan oleh contoh dari kelas <a class=\"reference internal\" href=\"/id/2.2/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\">Field</code></a> class -- sebagai contoh <a class=\"reference internal\" href=\"/id/2.2/ref/models/fields/#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\">CharField</code></a> untuk bidang karakter dan <a class=\"reference internal\" href=\"/id/2.2/ref/models/fields/#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\">DateTimeField</code></a> untuk tanggal waktu. Ini memberitahu Django jenis apa dari data setiap bidang yang disimpan.</p>\n<p>Nama dari setiap instance <a class=\"reference internal\" href=\"/id/2.2/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\">Field</code></a> (sebagai contoh question_text` or <code class=\"docutils literal notranslate\">pub_date</code>) adalah nama bidang, di bentuk mesin-bersahabat. Anda akan menggunakan nilai ini di kode Phyton, dan basisdata anda akan menggunakannya sebagai nama kolom.</p>\n<p>Anda dapat menggunakan pilihan argumen penempatan pertama pada <a class=\"reference internal\" href=\"/id/2.2/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\">Field</code></a> untuk merancang nama dapat dibaca-manusia. Itu digunakan di pasangan bagian mawas diri dari Django dan dia mengganda sebagai dokumentasi. Jika bidang ini tidak disediakan, Django akan menggunakan nama dapat dibaca-manusia. Di contoh ini, kami telah hanya menentukan nama dapat dibaca-manusia untuk <code class=\"docutils literal notranslate\">Question.pub_date</code>. Untuk semua bidang lain di model ini, nama dapat dibaca-mesin akan mencukupi sebagai nama dapat dibaca-manusia nya.</p>\n<p>Beberapa kelas <a class=\"reference internal\" href=\"/id/2.2/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\">Field</code></a> mempunyai argumen wajib. <a class=\"reference internal\" href=\"/id/2.2/ref/models/fields/#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\">CharField</code></a>, sebagai contoh, membutuhkan anda memberikannya sebuah <a class=\"reference internal\" href=\"/id/2.2/ref/models/fields/#django.db.models.CharField.max_length\" title=\"django.db.models.CharField.max_length\"><code class=\"xref py py-attr docutils literal notranslate\">max_length</code></a>. Yang digunakan tidak hanya untuk di skema basisdata, tetapi di pengesahan, seperti yang segera kita lihat.</p>\n<p>Sebuah <a class=\"reference internal\" href=\"/id/2.2/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\">Field</code></a> dapa juga mempunyai beragam argumen pilihan; dalam kasus ini, kami telah menyetel nilai <a class=\"reference internal\" href=\"/id/2.2/ref/models/fields/#django.db.models.Field.default\" title=\"django.db.models.Field.default\"><code class=\"xref py py-attr docutils literal notranslate\">default</code></a> dari <code class=\"docutils literal notranslate\">pilih</code> ke 0.</p>\n<p>Akhirnya, catatan hubungan ditentukan, menggunakan  <a class=\"reference internal\" href=\"/id/2.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a>. Yang mengatakan Django setiap <code class=\"docutils literal notranslate\">Choice</code> terhubung pada <code class=\"docutils literal notranslate\">Question</code> tunggal. Django mendukung semua hubungan basisdata umum: banyak-ke-satu, banyak-ke-banyak, dan satu-ke-satu.</p>\n</section>\n<section id=\"activating-models\">\n<h2>Mengaktifkan model<a class=\"heading-anchor\" href=\"#activating-models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ada banyak informasi yang dapat disampaikan oleh beberapa baris contoh kode di atas. Dengan kode ini, Django dapat melakukan:</p>\n<ul class=\"simple\">\n<li><p>Buat skema basisdata (pernyataan <code class=\"docutils literal notranslate\">CREATE TABLE</code>) untuk aplikasi ini.</p></li>\n<li><p>Buat API akses-basisdata Phyton untuk mengakses obyek <code class=\"docutils literal notranslate\">Pertanyaan</code> dan <code class=\"docutils literal notranslate\">Pilihan</code>.</p></li>\n</ul>\n<p>Tetapi pertama kami butuh untuk memberitahu proyek kam bahwa aplikasi <code class=\"docutils literal notranslate\">jejak pendapat</code> telah terpasang.</p>\n<aside class=\"admonition-philosophy admonition\" role=\"note\">\n<p class=\"admonition-title\">Filosofi</p>\n<p>Aplikasi Django dapat <code class=\"docutils literal notranslate\">ditanam</code>: Anda dapat menggunakan sebuah aplikasi dalam banyak proyek, dan anda dapat menyebarkan aplikasi, karena mereka tidak harus diikat pada pemasangan Django yang diberikan.</p>\n</aside>\n<p>Untuk menyertakan aplikasi di proyek kami, kami butuh menambahkan acuan pada kelas konfigurasinya di pengaturan <a class=\"reference internal\" href=\"/id/2.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>. Kelas <code class=\"docutils literal notranslate\">PollsConfig</code> ada di berkas <code class=\"file docutils literal notranslate\">polls/apps.py</code>, jadi jalur bertitiknya adalah <code class=\"docutils literal notranslate\">'polls.apps.PollsConfig'</code>. Sunting berkas <code class=\"file docutils literal notranslate\">mysite/settings.py</code> dan tambah jalur bertitik itu ke pengaturan <a class=\"reference internal\" href=\"/id/2.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>. itu akan terlihat seperti ini:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">mysite/settings.py</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>INSTALLED_APPS <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s1\">&#39;polls.apps.PollsConfig&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;django.contrib.admin&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;django.contrib.auth&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;django.contrib.contenttypes&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;django.contrib.sessions&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;django.contrib.messages&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;django.contrib.staticfiles&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>Sekarang Django tahu menyertakan aplikasi  <code class=\"docutils literal notranslate\">polls</code>. Mari kita jalankan perintah lain:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-1-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 manage.py makemigrations polls\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-1-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 manage.py makemigrations polls\n</code></pre></div></div></div>\n<p>Anda harus melihat sesuatu yang mirip pada berikut:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</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=\"Text code\"><code>Migrations for &#39;polls&#39;:\n  polls/migrations/0001_initial.py:\n    - Create model Choice\n    - Create model Question\n    - Add field question to choice\n</code></pre></div>\n<p>Dengan menjalankan <code class=\"docutils literal notranslate\">makemigrations</code>, anda mengatakan ke Django bahwa anda telah membuat beberapa perubahan di model anda (dalam kasus ini, anda telah membuat satu baru) dan itu anda ingin perubahan disimpan sebagai <em>migration</em>.</p>\n<p>Migration adalah bagaimana Django menyimpan perubahan pada model anda (dan demikian skema basisdata anda) - mereka hanya berkas di cakram. Anda dapat membaca migration untuk model baru anda jika anda suka; Dia adalah berkas <code class=\"docutils literal notranslate\">polls/migrations/0001_initial.py</code>. Jangan khawatir, anda tidak diharapkan membaca mereka setiap waktu Django membuat satu, tetapi mereka merancang untuk menjadi dapat disunting oleh manusia dalam kasus anda ingin secara manual menarik bagaimana Django merubah hal-hal.</p>\n<p>Terdapat perintah yang akan menjalankan perpindahan tempat untuk anda dan mengelola skema basisdata anda otomatis - itu disebut <a class=\"reference internal\" href=\"/id/2.2/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">migrate</code></a>, dan kami akan datang ke dia sebentar lagi - tetapi pertama mari kita lihat SQL apa yang memindahkan tempat akan berjalan. Perintah <a class=\"reference internal\" href=\"/id/2.2/ref/django-admin/#django-admin-sqlmigrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">sqlmigrate</code></a> mengambil nama perpindahan tempat dan mengembalikan SQL mereka:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-2-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 manage.py sqlmigrate polls <span class=\"m\">0001</span>\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-2-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 manage.py sqlmigrate polls 0001\n</code></pre></div></div></div>\n<p>Anda harus melihat sesuatu mirip pada berikut (kami telah membentuk kembali dia untuk dapat dibaca):</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</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=\"SQL code\"><code><span class=\"k\">BEGIN</span><span class=\"p\">;</span>\n<span class=\"c1\">--</span>\n<span class=\"c1\">-- Create model Choice</span>\n<span class=\"c1\">--</span>\n<span class=\"k\">CREATE</span> <span class=\"k\">TABLE</span> <span class=\"ss\">&quot;polls_choice&quot;</span> <span class=\"p\">(</span>\n    <span class=\"ss\">&quot;id&quot;</span> <span class=\"nb\">serial</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span> <span class=\"k\">PRIMARY</span> <span class=\"k\">KEY</span><span class=\"p\">,</span>\n    <span class=\"ss\">&quot;choice_text&quot;</span> <span class=\"nb\">varchar</span><span class=\"p\">(</span><span class=\"mi\">200</span><span class=\"p\">)</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span><span class=\"p\">,</span>\n    <span class=\"ss\">&quot;votes&quot;</span> <span class=\"nb\">integer</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span>\n<span class=\"p\">);</span>\n<span class=\"c1\">--</span>\n<span class=\"c1\">-- Create model Question</span>\n<span class=\"c1\">--</span>\n<span class=\"k\">CREATE</span> <span class=\"k\">TABLE</span> <span class=\"ss\">&quot;polls_question&quot;</span> <span class=\"p\">(</span>\n    <span class=\"ss\">&quot;id&quot;</span> <span class=\"nb\">serial</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span> <span class=\"k\">PRIMARY</span> <span class=\"k\">KEY</span><span class=\"p\">,</span>\n    <span class=\"ss\">&quot;question_text&quot;</span> <span class=\"nb\">varchar</span><span class=\"p\">(</span><span class=\"mi\">200</span><span class=\"p\">)</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span><span class=\"p\">,</span>\n    <span class=\"ss\">&quot;pub_date&quot;</span> <span class=\"k\">timestamp</span> <span class=\"k\">with</span> <span class=\"k\">time</span> <span class=\"k\">zone</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span>\n<span class=\"p\">);</span>\n<span class=\"c1\">--</span>\n<span class=\"c1\">-- Add field question to choice</span>\n<span class=\"c1\">--</span>\n<span class=\"k\">ALTER</span> <span class=\"k\">TABLE</span> <span class=\"ss\">&quot;polls_choice&quot;</span> <span class=\"k\">ADD</span> <span class=\"k\">COLUMN</span> <span class=\"ss\">&quot;question_id&quot;</span> <span class=\"nb\">integer</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span><span class=\"p\">;</span>\n<span class=\"k\">ALTER</span> <span class=\"k\">TABLE</span> <span class=\"ss\">&quot;polls_choice&quot;</span> <span class=\"k\">ALTER</span> <span class=\"k\">COLUMN</span> <span class=\"ss\">&quot;question_id&quot;</span> <span class=\"k\">DROP</span> <span class=\"k\">DEFAULT</span><span class=\"p\">;</span>\n<span class=\"k\">CREATE</span> <span class=\"k\">INDEX</span> <span class=\"ss\">&quot;polls_choice_7aa0f6ee&quot;</span> <span class=\"k\">ON</span> <span class=\"ss\">&quot;polls_choice&quot;</span> <span class=\"p\">(</span><span class=\"ss\">&quot;question_id&quot;</span><span class=\"p\">);</span>\n<span class=\"k\">ALTER</span> <span class=\"k\">TABLE</span> <span class=\"ss\">&quot;polls_choice&quot;</span>\n  <span class=\"k\">ADD</span> <span class=\"k\">CONSTRAINT</span> <span class=\"ss\">&quot;polls_choice_question_id_246c99a640fbbd72_fk_polls_question_id&quot;</span>\n    <span class=\"k\">FOREIGN</span> <span class=\"k\">KEY</span> <span class=\"p\">(</span><span class=\"ss\">&quot;question_id&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">REFERENCES</span> <span class=\"ss\">&quot;polls_question&quot;</span> <span class=\"p\">(</span><span class=\"ss\">&quot;id&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">DEFERRABLE</span> <span class=\"k\">INITIALLY</span> <span class=\"k\">DEFERRED</span><span class=\"p\">;</span>\n\n<span class=\"k\">COMMIT</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>Catatan berikut:</p>\n<ul class=\"simple\">\n<li><p>Keluaran pasti akan bermacam tergantung di basisdata anda gunakan. Contoh diatas adalah membangkitkan untuk PostgreSQL.</p></li>\n<li><p>Nama tabel otomatis dibangkitkan dengan memadukan nama dari aplikasi (<code class=\"docutils literal notranslate\">polls</code>) dan nama huruf kecil dari model -- <code class=\"docutils literal notranslate\">question</code> and <code class=\"docutils literal notranslate\">choice</code>. (Anda dapat menimpa kebiasaan ini.)</p></li>\n<li><p>Kunci utama (ID) ditambahkan otomatis. (Anda dapat menimpa ini, juga.)</p></li>\n<li><p>Berdasarkan kebiasaan, Django menambahkan <code class=\"docutils literal notranslate\">&quot;_id&quot;</code> ke nama bidang foreign key. (Ya, anda dapat menimpa ini, juga.)</p></li>\n<li><p>Hubungan foreign key adalah dibuat eksplisit dengan pembatas <code class=\"docutils literal notranslate\">FOREIGN KEY</code>. Jangan khawatir tentang bagian <code class=\"docutils literal notranslate\">DEFERRABLE</code>; Itu hanya memberitahu PostgreSQL tidak untuk memaksa foreign key sampai akhir dari transaksi.</p></li>\n<li><p>Dia disesuaiakan ke basisdata anda gunakan, jadi jenis bidang basisdata-khusus seperti <code class=\"docutils literal notranslate\">auto_increment</code> (MySQL), <code class=\"docutils literal notranslate\">serial</code> (PostgreSQL), atau <code class=\"docutils literal notranslate\">integer primary key autoincrement</code> (SQLite) ditangani untuk anda otomatis. Sama berlaku untuk mengutio nama bidang -- sebagai contoh, gunakan kutip ganda atau kutip tunggal.</p></li>\n<li><p>Perintah <a class=\"reference internal\" href=\"/id/2.2/ref/django-admin/#django-admin-sqlmigrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">sqlmigrate</code></a> sebenarnya tidak menjalankan pemindahan tempat di basisdata anda - dia hanya mencetaknya ke layar sehingga anda dapat melihatnya apa SQL Django pikir wajib. Dia sangat berguna untuk memeriksa apa Django akan lakukan jika anda mempunyai basisdata administrator yang membutuhkan tulisan SQL untuk perubahan.</p></li>\n</ul>\n<p>Jika anda tertarik, anda dapat juga menjalankan <a class=\"reference internal\" href=\"/id/2.2/ref/django-admin/#django-admin-check\"><code class=\"xref std std-djadmin docutils literal notranslate\">python periksa manage.py</code></a>; pemeriksaan ini untuk masalah apapun di proyek anda tanpa membuat perindahan tempat atau menyentuk basisdata.</p>\n<p>Sekarang, jalankan <a class=\"reference internal\" href=\"/id/2.2/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">migrate</code></a> kembali untuk membuat tabel model tersebut di basisdata anda:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-3-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 manage.py migrate\n<span class=\"go\">Operations to perform:</span>\n<span class=\"go\">  Apply all migrations: admin, auth, contenttypes, polls, sessions</span>\n<span class=\"go\">Running migrations:</span>\n<span class=\"go\">  Rendering model states... DONE</span>\n<span class=\"go\">  Applying polls.0001_initial... OK</span>\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-3-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 manage.py migrate\n<span class=\"go\">Operations to perform:</span>\n<span class=\"go\">  Apply all migrations: admin, auth, contenttypes, polls, sessions</span>\n<span class=\"go\">Running migrations:</span>\n<span class=\"go\">  Rendering model states... DONE</span>\n<span class=\"go\">  Applying polls.0001_initial... OK</span>\n</code></pre></div></div></div>\n<p>Perintah <a class=\"reference internal\" href=\"/id/2.2/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">migrate</code></a> membawa semua pemindahan tempat yang belum diberlakukan (Django melacak yang mana diberlakukan menggunakan tabel khusus di basisdata anda disebut <code class=\"docutils literal notranslate\">django_migrations</code>) dan menjalankan mereka terhadap basisdata anda - pada dasarnya, sinkronisasi perubahan anda buat ke model anda dengan skema di basisdata.</p>\n<p>Pemindahan tempat adalah sangat kuat dan membuat anda merubah model anda lembur, ketika anda mengembangkan proyek anda, tanpa buth menghapus basisdata anda atau tabel dan membuat satu yang baru - Dia khusus dalam meningkatkan basisdata langsung, tanpa kehilangan data. Kami akan melingkupi mereka lebih dalam di bagian kemudian dari tutorial, tetapi untuk sekarang, ingat panduan tiga-langkah untuk membuat perubahan model:</p>\n<ul class=\"simple\">\n<li><p>Rubah model anda (di``models.py``).</p></li>\n<li><p>Jalankan <a class=\"reference internal\" href=\"/id/2.2/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\">python manage.py makemigrations</code></a> untuk membuat perpindahan tempat untuk perubahan tersebut</p></li>\n<li><p>Jalankan <a class=\"reference internal\" href=\"/id/2.2/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">python manage.py migrate</code></a> untuk memberlakukan perubahan tersebut ke basisdata.</p></li>\n</ul>\n<p>Alasan bahwa ada perintah terpisah untuk membuat dan memberlakukan perpindahan karena anda akan menyerahkan perpindahan ke sistem kendali versi anda dan mengirimkan mereka dengan aplikasi anda; mereka tidak hanya membuat pengembangan anda lebih mudah, mereka juga berguna oleh pengembang-pengembang lain dan dalam produksi.</p>\n<p>Baca  <a class=\"reference internal\" href=\"/id/2.2/ref/django-admin/\"><span class=\"doc\">django-admin documentation</span></a> untuk informasi penuh pada apa kegunaan <code class=\"docutils literal notranslate\">manage.py</code> dapat lakukan.</p>\n</section>\n<section id=\"playing-with-the-api\">\n<h2>Bermain dengan API<a class=\"heading-anchor\" href=\"#playing-with-the-api\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Sekarang, mari kita melompat ke dalam shell Phyton dan bermain dengan API bebas Django yang diberikan ke anda. Untuk memintah shell Phyton, gunakan perintah ini:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-4-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 manage.py shell\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-4-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 manage.py shell\n</code></pre></div></div></div>\n<p>Kami menggunakan ini daripada pengetikan sederhana &quot;phyton&quot;, karena mengatur variabel lingkungan <code class=\"docutils literal notranslate\">DJANGO_SETTINGS_MODULE</code>, yang memberikan Django jalur impor Phyton ke bekas <code class=\"file docutils literal notranslate\">mysite/settings.py</code> anda.</p>\n<p>Sekali anda telah di kerang, jelajahi  <a class=\"reference internal\" href=\"/id/2.2/topics/db/queries/\"><span class=\"doc\">API basisdata</span></a>:</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=\"nn\">polls.models</span> <span class=\"kn\">import</span> Choice<span class=\"p\">,</span> Question  <span class=\"c1\"># Import the model classes we just wrote.</span>\n\n<span class=\"go\"># No questions are in the system yet.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Question<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet []&gt;</span>\n\n<span class=\"go\"># Create a new Question.</span>\n<span class=\"go\"># Support for time zones is enabled in the default settings file, so</span>\n<span class=\"go\"># Django expects a datetime with tzinfo for pub_date. Use timezone.now()</span>\n<span class=\"go\"># instead of datetime.datetime.now() and it will do the right thing.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"kn\">import</span> timezone\n<span class=\"gp\">&gt;&gt;&gt; </span>q <span class=\"o\">=</span> Question<span class=\"p\">(</span>question_text<span class=\"o\">=</span><span class=\"s2\">&quot;What&#39;s new?&quot;</span><span class=\"p\">,</span> pub_date<span class=\"o\">=</span>timezone<span class=\"o\">.</span>now<span class=\"p\">())</span>\n\n<span class=\"go\"># Save the object into the database. You have to call save() explicitly.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>q<span class=\"o\">.</span>save<span class=\"p\">()</span>\n\n<span class=\"go\"># Now it has an ID.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>q<span class=\"o\">.</span>id\n<span class=\"go\">1</span>\n\n<span class=\"go\"># Access model field values via Python attributes.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>q<span class=\"o\">.</span>question_text\n<span class=\"go\">&quot;What&#39;s new?&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>q<span class=\"o\">.</span>pub_date\n<span class=\"go\">datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=&lt;UTC&gt;)</span>\n\n<span class=\"go\"># Change values by changing the attributes, then calling save().</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>q<span class=\"o\">.</span>question_text <span class=\"o\">=</span> <span class=\"s2\">&quot;What&#39;s up?&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>q<span class=\"o\">.</span>save<span class=\"p\">()</span>\n\n<span class=\"go\"># objects.all() displays all the questions in the database.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Question<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Question: Question object (1)&gt;]&gt;</span>\n</code></pre></div>\n<p>Tunggu dulu. <code class=\"docutils literal notranslate\">&lt;Question: Question object (1)&gt;</code> bukanlah perwakilan membantu dari obyek ini. Mari kita perbaiki itu dengan menyunting modl <code class=\"docutils literal notranslate\">Question</code> (dalam berkas  <code class=\"docutils literal notranslate\">polls/models.py</code>) dan menambahkan sebuah metode <a class=\"reference internal\" href=\"/id/2.2/ref/models/instances/#django.db.models.Model.__str__\" title=\"django.db.models.Model.__str__\"><code class=\"xref py py-meth docutils literal notranslate\">__str__()</code></a> pada kedua <code class=\"docutils literal notranslate\">Question</code> dan <code class=\"docutils literal notranslate\">Choice</code>:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">polls/models.py</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.db</span> <span class=\"kn\">import</span> models\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=\"k\">def</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>question_text\n\n<span class=\"k\">class</span> <span class=\"nc\">Choice</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"k\">def</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>choice_text\n</code></pre></figure>\n<p>Sangat penting menambahkan cara <a class=\"reference internal\" href=\"/id/2.2/ref/models/instances/#django.db.models.Model.__str__\" title=\"django.db.models.Model.__str__\"><code class=\"xref py py-meth docutils literal notranslate\">__str__()</code></a> ke model anda, tidak hanya kenyamanan anda ketika berurusan dengan prompt interaktif, tetapi juga karena perwakilan obyek digunakan di seluruh admin dibangkitkan-otomatis Django.</p>\n<p id=\"tutorial02-import-timezone\">Let's also add a custom method to this model:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">polls/models.py</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\">import</span> <span class=\"nn\">datetime</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"kn\">import</span> timezone\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=\"k\">def</span> <span class=\"nf\">was_published_recently</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>pub_date <span class=\"o\">&gt;=</span> timezone<span class=\"o\">.</span>now<span class=\"p\">()</span> <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>\n</code></pre></figure>\n<p>Catat tambahand dari <code class=\"docutils literal notranslate\">import datetime</code> dan <code class=\"docutils literal notranslate\">from django.utils import timezone</code>, untuk mengacu standar Phyton modul <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#module-datetime\" title=\"(di Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\">datetime</code></a> dan kegunaan zona-waktu-terhubung Django di <a class=\"reference internal\" href=\"/id/2.2/ref/utils/#module-django.utils.timezone\" title=\"django.utils.timezone: Timezone support.\"><code class=\"xref py py-mod docutils literal notranslate\">django.utils.timezone</code></a>, masing-masing. Jika anda belum akrab dengan penanganan zona waktu di Phyton, anda dapat mempelajari lebih di <a class=\"reference internal\" href=\"/id/2.2/topics/i18n/timezones/\"><span class=\"doc\">dokumen dukungan zona waktu</span></a>.</p>\n<p>Simpan perubahan ini dan mulai shell interaktif Phyton baru dengan menjalankan python manage.py shell` kembali:</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=\"nn\">polls.models</span> <span class=\"kn\">import</span> Choice<span class=\"p\">,</span> Question\n\n<span class=\"go\"># Make sure our __str__() addition worked.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Question<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Question: What&#39;s up?&gt;]&gt;</span>\n\n<span class=\"go\"># Django provides a rich database lookup API that&#39;s entirely driven by</span>\n<span class=\"go\"># keyword arguments.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Question<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Question: What&#39;s up?&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Question<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>question_text__startswith<span class=\"o\">=</span><span class=\"s1\">&#39;What&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Question: What&#39;s up?&gt;]&gt;</span>\n\n<span class=\"go\"># Get the question that was published this year.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"kn\">import</span> timezone\n<span class=\"gp\">&gt;&gt;&gt; </span>current_year <span class=\"o\">=</span> timezone<span class=\"o\">.</span>now<span class=\"p\">()</span><span class=\"o\">.</span>year\n<span class=\"gp\">&gt;&gt;&gt; </span>Question<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>pub_date__year<span class=\"o\">=</span>current_year<span class=\"p\">)</span>\n<span class=\"go\">&lt;Question: What&#39;s up?&gt;</span>\n\n<span class=\"go\"># Request an ID that doesn&#39;t exist, this will raise an exception.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Question<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n    <span class=\"o\">...</span>\n<span class=\"gr\">DoesNotExist</span>: Question matching query does not exist.\n\n<span class=\"x\"># Lookup by a primary key is the most common case, so Django provides a</span>\n<span class=\"x\"># shortcut for primary-key exact lookups.</span>\n<span class=\"x\"># The following is identical to Question.objects.get(id=1).</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Question<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>pk<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;Question: What&#39;s up?&gt;</span>\n\n<span class=\"go\"># Make sure our custom method worked.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>q <span class=\"o\">=</span> Question<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>pk<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>q<span class=\"o\">.</span>was_published_recently<span class=\"p\">()</span>\n<span class=\"go\">True</span>\n\n<span class=\"go\"># Give the Question a couple of Choices. The create call constructs a new</span>\n<span class=\"go\"># Choice object, does the INSERT statement, adds the choice to the set</span>\n<span class=\"go\"># of available choices and returns the new Choice object. Django creates</span>\n<span class=\"go\"># a set to hold the &quot;other side&quot; of a ForeignKey relation</span>\n<span class=\"go\"># (e.g. a question&#39;s choice) which can be accessed via the API.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>q <span class=\"o\">=</span> Question<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>pk<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n<span class=\"go\"># Display any choices from the related object set -- none so far.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>q<span class=\"o\">.</span>choice_set<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet []&gt;</span>\n\n<span class=\"go\"># Create three choices.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>q<span class=\"o\">.</span>choice_set<span class=\"o\">.</span>create<span class=\"p\">(</span>choice_text<span class=\"o\">=</span><span class=\"s1\">&#39;Not much&#39;</span><span class=\"p\">,</span> votes<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;Choice: Not much&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>q<span class=\"o\">.</span>choice_set<span class=\"o\">.</span>create<span class=\"p\">(</span>choice_text<span class=\"o\">=</span><span class=\"s1\">&#39;The sky&#39;</span><span class=\"p\">,</span> votes<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;Choice: The sky&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c <span class=\"o\">=</span> q<span class=\"o\">.</span>choice_set<span class=\"o\">.</span>create<span class=\"p\">(</span>choice_text<span class=\"o\">=</span><span class=\"s1\">&#39;Just hacking again&#39;</span><span class=\"p\">,</span> votes<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n\n<span class=\"go\"># Choice objects have API access to their related Question objects.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"o\">.</span>question\n<span class=\"go\">&lt;Question: What&#39;s up?&gt;</span>\n\n<span class=\"go\"># And vice versa: Question objects get access to Choice objects.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>q<span class=\"o\">.</span>choice_set<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Choice: Not much&gt;, &lt;Choice: The sky&gt;, &lt;Choice: Just hacking again&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>q<span class=\"o\">.</span>choice_set<span class=\"o\">.</span>count<span class=\"p\">()</span>\n<span class=\"go\">3</span>\n\n<span class=\"go\"># The API automatically follows relationships as far as you need.</span>\n<span class=\"go\"># Use double underscores to separate relationships.</span>\n<span class=\"go\"># This works as many levels deep as you want; there&#39;s no limit.</span>\n<span class=\"go\"># Find all Choices for any question whose pub_date is in this year</span>\n<span class=\"go\"># (reusing the &#39;current_year&#39; variable we created above).</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Choice<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>question__pub_date__year<span class=\"o\">=</span>current_year<span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Choice: Not much&gt;, &lt;Choice: The sky&gt;, &lt;Choice: Just hacking again&gt;]&gt;</span>\n\n<span class=\"go\"># Let&#39;s delete one of the choices. Use delete() for that.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c <span class=\"o\">=</span> q<span class=\"o\">.</span>choice_set<span class=\"o\">.</span>filter<span class=\"p\">(</span>choice_text__startswith<span class=\"o\">=</span><span class=\"s1\">&#39;Just hacking&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"o\">.</span>delete<span class=\"p\">()</span>\n</code></pre></div>\n<p>Untuk informasi lebih di kaitan model, lihat <a class=\"reference internal\" href=\"/id/2.2/ref/models/relations/\"><span class=\"doc\">Accessing related objects</span></a>. Untuk lebih bagaimana menggunakan garis bawah ganda untuk melakukan bidang lookup melalui API, lihat <a class=\"reference internal\" href=\"/id/2.2/topics/db/queries/#field-lookups-intro\"><span class=\"std std-ref\">Field lookups</span></a>. Untuk rincian penuh di basisdata API, lihat <a class=\"reference internal\" href=\"/id/2.2/topics/db/queries/\"><span class=\"doc\">Database API reference</span></a> kami.</p>\n</section>\n<section id=\"introducing-the-django-admin\">\n<h2>Memperkenalkan Admin Django<a class=\"heading-anchor\" href=\"#introducing-the-django-admin\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<aside class=\"admonition-philosophy admonition\" role=\"note\">\n<p class=\"admonition-title\">Filosofi</p>\n<p>Membangkitkan situs admin untuk staf atau klien anda untuk menambah, merubah, dan menghapus isi adalah pekerjaan membosankan yang tidak membutuhkan banyak kreatifitas. Untuk alasan itu, Django sepenuhnya otomatisasi pembuatan antarmuka admin untuk model.</p>\n<p>Django ditulis di lingkungan ruang berita, dengan pemisahan jelas antara situs &quot;penerbit umum&quot; dan &quot;umum&quot;. Pengelola situs menggunakan sistem untuk menambahkan cerita berita, acara, skor olahraga, dll. dan isi itu ditampilkan di situs umum. Django mengatasi masalah dari pembuatan antarmuka terpadu untuk administrator situs untuk menyunting isi.</p>\n<p>Admin tidak diperuntukkan untuk digunakan oleh pengunjung situs. Itu untuk pengelola situs.</p>\n</aside>\n<section id=\"creating-an-admin-user\">\n<h3>Membuat pengguna admin<a class=\"heading-anchor\" href=\"#creating-an-admin-user\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Pertama kami akan butuh membuat pengguna yang dapat masuk ke situs admin. Jalankan perintah berikut:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-5-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 manage.py createsuperuser\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-5-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 manage.py createsuperuser\n</code></pre></div></div></div>\n<p>Masukkan nama pengguna anda inginkan dan tekan enter.</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</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=\"Text code\"><code>Username: admin\n</code></pre></div>\n<p>Anda akan diarahkan ke alamat surel yang anda inginkan:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</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=\"Text code\"><code>Email address: admin@example.com\n</code></pre></div>\n<p>Langkah akhir adalah memasukkan sandi anda. Anda akan diminta memasukkan sandi anda dua kali, kedua kali sebagai penegasan dari yang pertama.</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</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=\"Text code\"><code>Password: **********\nPassword (again): *********\nSuperuser created successfully.\n</code></pre></div>\n</section>\n<section id=\"start-the-development-server\">\n<h3>Nyalakan peladen pengembangan<a class=\"heading-anchor\" href=\"#start-the-development-server\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Situs Admin Django diaktifkan secara awal. Mari kita nyalakan peladen pengembangan dan jelajahi dia.</p>\n<p>Jika peladen tidak berjalan nyalakan seperti biasa:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-6-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 manage.py runserver\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-6-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 manage.py runserver\n</code></pre></div></div></div>\n<p>Sekarang, buka perambah Jaringan dan pergi ke &quot;/admin/&quot; di lokal admin - sebagai contoh, <a class=\"reference external\" href=\"http://127.0.0.1:8000/admin/\">http://127.0.0.1:8000/admin/</a>. Anda harus melihat layar masih admin:</p>\n<img alt=\"Django admin login screen\" src=\"/id/2.2/_images/admin01.png\" />\n<p>Sejak <a class=\"reference internal\" href=\"/id/2.2/topics/i18n/translation/\"><span class=\"doc\">translation</span></a> dihidupkan secara awal, layar masuk mungkin menampilkan bahasa anda sendiri, tergantung pada pengaturan perambah anda dan jika Django mempunyai terjemahan untuk bahasa ini.</p>\n</section>\n<section id=\"enter-the-admin-site\">\n<h3>Masuk situs admin<a class=\"heading-anchor\" href=\"#enter-the-admin-site\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Sekarang, coba masuk dengan akun superuser anda telah buat di langkah sebelumnya. Anda seharusnya melihat halaman index admin Django:</p>\n<img alt=\"Django admin index page\" src=\"/id/2.2/_images/admin02.png\" />\n<p>Anda seharusnya melihat beberapa jenis isi dapat disunting: kelompok dan pengguna. Mereka disediakan oleh <a class=\"reference internal\" href=\"/id/2.2/topics/auth/#module-django.contrib.auth\" title=\"django.contrib.auth: Django's authentication framework.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.auth</code></a>, kerangka pembuktian keaslian dikirim oleh Django.</p>\n</section>\n<section id=\"make-the-poll-app-modifiable-in-the-admin\">\n<h3>Buat aplikasi jejak pendapat dapat di rubah di admin<a class=\"heading-anchor\" href=\"#make-the-poll-app-modifiable-in-the-admin\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Tetapi dimana aplikasi jejak pendapat kami? DIa tidak ditampilkan di halaman index admin.</p>\n<p>Hanya satu hal untuk dilakukan: kami butuh memberitahu admin bahwa obyek <code class=\"docutils literal notranslate\">Question</code> mempunyai antarmuka admin. Untuk melakukannya, buka berkas <code class=\"file docutils literal notranslate\">polls/admin.py</code>, dan sunting dia seperti ini:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">polls/admin.py</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\nadmin<span class=\"o\">.</span>site<span class=\"o\">.</span>register<span class=\"p\">(</span>Question<span class=\"p\">)</span>\n</code></pre></figure>\n</section>\n<section id=\"explore-the-free-admin-functionality\">\n<h3>Jelajahi fungsi admin bebas<a class=\"heading-anchor\" href=\"#explore-the-free-admin-functionality\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Sekarang kita telah mendaftarkan <code class=\"docutils literal notranslate\">Question</code>, Django mengetahui bahwa itu harus ditampilkan di halaman index admin:</p>\n<img alt=\"Django admin index page, now with polls displayed\" src=\"/id/2.2/_images/admin03t.png\" />\n<p>Klik <code class=\"docutils literal notranslate\">Question</code>. Sekarang anda berada di halaman &quot;change list&quot; untuk pertanyaan. Halaman ini menampilkan semua pertanyaan di basisdata dan membiarkan anda memilih satu untuk merubahnya. Ada pertanyaan &quot;Ada apa? kami buat sebelumnya:</p>\n<img alt=\"Polls change list page\" src=\"/id/2.2/_images/admin04t.png\" />\n<p>Klik pertanyaan &quot;Ada apa?&quot; untuk menyuntingnya:</p>\n<img alt=\"Editing form for question object\" src=\"/id/2.2/_images/admin05t.png\" />\n<p>Hal-hal untuk dicatat disini:</p>\n<ul class=\"simple\">\n<li><p>Formulir otomatis dibangkitkan dari model <code class=\"docutils literal notranslate\">Question</code>.</p></li>\n<li><p>Jenis bidang model berbeda ((<a class=\"reference internal\" href=\"/id/2.2/ref/models/fields/#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\">DateTimeField</code></a>, <a class=\"reference internal\" href=\"/id/2.2/ref/models/fields/#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\">CharField</code></a>) berhubungan ke widget masukan HTML sesuai. Setiap jenis dari bidang mengetahui bagaimana menampilkan diri sendiri di admin Django.</p></li>\n<li><p>Setiap <a class=\"reference internal\" href=\"/id/2.2/ref/models/fields/#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\">DateTimeField</code></a> mendapatkan jalan pintas Javascript bebas. Tanggal mendapatkan jalan pintas &quot;Hari ini&quot; dan popup kalender, dan waktu mendapatkan jalan pintas &quot;Sekarang&quot; dan popup nyaman yang menampilkan waktu dimasukkan umum.</p></li>\n</ul>\n<p>Bagian bawah halaman memberikan anda pasangan pilihan:</p>\n<ul class=\"simple\">\n<li><p>Simpan -- Simpan perubahan dan kembalikan halaman daftar-rubah untuk jenis ini dari obyek.</p></li>\n<li><p>Simpan dan lanjutkan menyunting -- Simpan perubahan dan muat kembali halaman admin untuk obyek ini.</p></li>\n<li><p>Simpan dan tambah lain -- Simpan perubahan dan muat baru, formulir kosong untuk jenis ini dari obyek.</p></li>\n<li><p>Hapus -- Tampilkan halaman penegasan hapus.</p></li>\n</ul>\n<p>Jika nilai &quot;Tanggal diterbitkan&quot; tidak cocok waktu ketika anda membuat pertanyaan di <a class=\"reference internal\" href=\"/id/2.2/intro/tutorial01/\"><span class=\"doc\">Tutorial 1</span></a>, itu kemungkinan berarti anda lupa untuk mengatur nilai benar untuk pengaturan <a class=\"reference internal\" href=\"/id/2.2/ref/settings/#std-setting-TIME_ZONE\"><code class=\"xref std std-setting docutils literal notranslate\">TIME_ZONE</code></a>. Rubah itu, muat kembali halaman dan periksa bahwa nilai benar muncul.</p>\n<p>Rubah &quot;Tanggal diterbitkan&quot; dengan mengklik jalan pintas &quot;Hari ini&quot; dan &quot;Sekarang&quot;. Lalu klik &quot;Simpan dan lanjut menyunting&quot;. Lalu klik &quot;Sejarah&quot; di kanan atas. Anda akan melihat halaman menampilkan semua perubahan yang dibuat pada obyek ini melalui admin Django, dengan stempel waktu dan nama pengguna dari orang yang membuat perubahan:</p>\n<img alt=\"History page for question object\" src=\"/id/2.2/_images/admin06t.png\" />\n<p>Ketika anda sudah nyaman dengan API model dan telah mengakrabkan diri anda dengan situs admin, baca <a class=\"reference internal\" href=\"/id/2.2/intro/tutorial03/\"><span class=\"doc\">part 3 of this tutorial</span></a> untuk mempelajari tentang bagaimana menambahkan tampilan lebih ke aplikasi jejak pendapat kami.</p>\n</section>\n</section>","rootId":"writing-your-first-django-app-part-2","toc":[{"title":"Pengaturan basisdata","anchor":"database-setup","children":[]},{"title":"Membuat model","anchor":"creating-models","children":[]},{"title":"Mengaktifkan model","anchor":"activating-models","children":[]},{"title":"Bermain dengan API","anchor":"playing-with-the-api","children":[]},{"title":"Memperkenalkan Admin Django","anchor":"introducing-the-django-admin","children":[{"title":"Membuat pengguna admin","anchor":"creating-an-admin-user","children":[]},{"title":"Nyalakan peladen pengembangan","anchor":"start-the-development-server","children":[]},{"title":"Masuk situs admin","anchor":"enter-the-admin-site","children":[]},{"title":"Buat aplikasi jejak pendapat dapat di rubah di admin","anchor":"make-the-poll-app-modifiable-in-the-admin","children":[]},{"title":"Jelajahi fungsi admin bebas","anchor":"explore-the-free-admin-functionality","children":[]}]}],"breadcrumbs":[{"docname":"intro/index","title":"Mulai","url":"/id/2.2/intro/"}],"prev":{"docname":"intro/tutorial01","title":"Menulis aplikasi Django pertama anda, bagian 1","url":"/id/2.2/intro/tutorial01/"},"next":{"docname":"intro/tutorial03","title":"Menulis aplikasi Django pertama anda, bagian 3","url":"/id/2.2/intro/tutorial03/"},"formats":{"html":"/id/2.2/intro/tutorial02/","markdown":"/id/2.2/intro/tutorial02.md","json":"/id/2.2/intro/tutorial02.json"},"source":"https://github.com/django/django/blob/stable/2.2.x/docs/intro/tutorial02.txt","official":"https://docs.djangoproject.com/id/2.2/intro/tutorial02/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}