{"title":"Menulis aplikasi Django kedua anda, bagian 2","version":"4.2","locale":"id","docname":"intro/tutorial02","url":"/id/4.2/intro/tutorial02/","canonical":"https://djangodocs.dev/id/4.2/intro/tutorial02/","summary":"Ttutorial ini memulai dimana Tutorial 1 ditinggalkan. Kami akan menyetelbasisdata, buat model pertama anda, dan dapatkan pengenalan cepat pada dibangkitkan-otomatis…","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>Ttutorial ini memulai dimana <a class=\"reference internal\" href=\"/id/4.2/intro/tutorial01/\"><span class=\"doc\">Tutorial 1</span></a> ditinggalkan. Kami akan menyetelbasisdata, buat model pertama anda, dan dapatkan pengenalan cepat pada dibangkitkan-otomatis situs admin Django.</p>\n<aside class=\"admonition-where-to-get-help admonition\">\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/4.2/faq/help/\"><span class=\"doc\">Getting Help</span></a> bagian dari FAQ.</p>\n</aside>\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\"><span class=\"pre\">mysite/settings.py</span></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/4.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/4.2/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASES</span></code></a> <code class=\"docutils literal notranslate\"><span class=\"pre\">'default'</span></code> untuk mencocokkan pengaturan hubungan basisdata anda:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/id/4.2/ref/settings/#std-setting-DATABASE-ENGINE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ENGINE</span></code></a> -- Salah satu <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.db.backends.sqlite3'</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.db.backends.postgresql'</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.db.backends.mysql'</span></code>, atau <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.db.backends.oracle'</span></code>. Backend lainnya adalah <a class=\"reference internal\" href=\"/id/4.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/4.2/ref/settings/#std-setting-NAME\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">NAME</span></code></a> -- Nama dari basisdata anda. Jika anda menggunakan SQLite, basisdata akan diberkaskan dalam komputer anda; dalam kasus itu, <a class=\"reference internal\" href=\"/id/4.2/ref/settings/#std-setting-NAME\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">NAME</span></code></a> harus berupa jalur mutlak, termasuk nama berkas, dari berkas itu. Nilai awalan, <code class=\"docutils literal notranslate\"><span class=\"pre\">BASE_DIR</span> <span class=\"pre\">/</span> <span class=\"pre\">'db.sqlite3'</span></code>, akan menyimpan berkas dalam 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/4.2/ref/settings/#std-setting-USER\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USER</span></code></a>, <a class=\"reference internal\" href=\"/id/4.2/ref/settings/#std-setting-PASSWORD\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">PASSWORD</span></code></a>, dan <a class=\"reference internal\" href=\"/id/4.2/ref/settings/#std-setting-HOST\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">HOST</span></code></a> harus ditambahkan. Untuk lebih rinci, lihat acuan dukumentasi untuk <a class=\"reference internal\" href=\"/id/4.2/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASES</span></code></a>.</p>\n<aside class=\"admonition-for-databases-other-than-sqlite admonition\">\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\"><span class=\"pre\">CREATE_DATABASE</span> <span class=\"pre\">database_name;</span></code>&quot; melalui prompt interaktif basisdata.</p>\n<p>Juga pastikan bahwa basisdata yang disiapkan dalam <code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/settings.py</span></code> memiliki izin untuk &quot;membuat database&quot;. Hal ini memungkinkan untuk membuat <a class=\"reference internal\" href=\"/id/4.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\"><span class=\"pre\">mysite/settings.py</span></code>, setel <a class=\"reference internal\" href=\"/id/4.2/ref/settings/#std-setting-TIME_ZONE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TIME_ZONE</span></code></a> ke zona waktu anda.</p>\n<p>Juga, catat pengaturan <a class=\"reference internal\" href=\"/id/4.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></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/4.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> mengandung aplikasi berikut, semua yang datang dengan Django:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/id/4.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\"><span class=\"pre\">django.contrib.admin</span></code></a> -- Situs admin. Anda akan menggunakannya segera.</p></li>\n<li><p><a class=\"reference internal\" href=\"/id/4.2/topics/auth/#module-django.contrib.auth\" title=\"django.contrib.auth: Django's authentication framework.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.auth</span></code></a> -- Sebuah sistem pembuktian keaslian.</p></li>\n<li><p><a class=\"reference internal\" href=\"/id/4.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\"><span class=\"pre\">django.contrib.contenttypes</span></code></a> -- Sebuah kerangka untuk jenis isi.</p></li>\n<li><p><a class=\"reference internal\" href=\"/id/4.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\"><span class=\"pre\">django.contrib.sessions</span></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/4.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\"><span class=\"pre\">django.contrib.staticfiles</span></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<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>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/4.2/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a> mencari <a class=\"reference internal\" href=\"/id/4.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> setelan dan membuat tabel database yang diperlukan menurut pengaturan basisdata anda dalam berkas <code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/settings.py</span></code> dan perpindahan basisdata disertai dengan aplikasi (kami akan membahas itu nanti). Anda akan melihat sebuah pesan untuk setiap perpindahan yang sudah dilakukan, jalankan baris-perintah klien untuk basisdata anda dan ketik <code class=\"docutils literal notranslate\"><span class=\"pre\">\\dt</span></code> (PostgreSQL), <code class=\"docutils literal notranslate\"><span class=\"pre\">SHOW</span> <span class=\"pre\">TABLES;</span></code> (MariaDB, MySQL), <code class=\"docutils literal notranslate\"><span class=\"pre\">.tables</span></code> (SQLite), atau <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span> <span class=\"pre\">TABLE_NAME</span> <span class=\"pre\">FROM</span> <span class=\"pre\">USER_TABLES;</span></code> (Oracle) untuk menampilkan tabel-tabel Django yang dibuat.</p>\n<aside class=\"admonition-for-the-minimalists admonition\">\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/4.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> sebelum menjalankan <a class=\"reference internal\" href=\"/id/4.2/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a>. Perintah <a class=\"reference internal\" href=\"/id/4.2/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a> akan hanya menjalankan pemindahan tempat untuk aplikasi di <a class=\"reference internal\" href=\"/id/4.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></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\">\n<p class=\"admonition-title\">Filosofi</p>\n<p>Sebuah model adalah tunggal, sumber tetap dari informasi tentang data anda. Itu mengandung bidang yang diperlukan dan perilaku dari data anda sedang simpan. Django mengikuti <a class=\"reference internal\" href=\"/id/4.2/misc/design-philosophies/#dry\"><span class=\"std std-ref\">DRY Principle</span></a>. Tujuannya adalah untuk menentukan model data dalam satu tempat dan otomatis mengambil hal-hal dari itu.</p>\n<p>Ini termasuk perpindahan - tidak seperti dalam Ruby On Rails, sebagai contoh, perpindahan seluruhnya diturunkan dari berkas model anda, dan dasarnya sebuah sejarah dimana Django bisa berguling untuk memperbaharui skema basisdata anda agar cocok ke model anda saat ini.</p>\n</aside>\n<p>Dalam aplikasi jejak pendapat kami, kami akan membuat dua model: <code class=\"docutils literal notranslate\"><span class=\"pre\">Question</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">Choice</span></code>. <code class=\"docutils literal notranslate\"><span class=\"pre\">Question</span></code> memiliki pertanyaan dan tanggal penerbitan. <code class=\"docutils literal notranslate\"><span class=\"pre\">Choice</span></code> memiliki dua bidang: teks dari pilihan dan perhitungan pilihan. Setiap <code class=\"docutils literal notranslate\"><span class=\"pre\">Choice</span></code> dikaitkan dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">Question</span></code>.</p>\n<p>Konsep ini diwakilkan oleh kelas Python. Sunting berkas <code class=\"file docutils literal notranslate\"><span class=\"pre\">polls/models.py</span></code> sehingga terlihat seperti ini:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">polls/models.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Question</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">question_text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    <span class=\"n\">pub_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"s2\">&quot;date published&quot;</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Choice</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">question</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Question</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">choice_text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    <span class=\"n\">votes</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>Disini, setiap model diwakilkan dengan kelas yang subkelas <a class=\"reference internal\" href=\"/id/4.2/ref/models/instances/#django.db.models.Model\" title=\"django.db.models.Model\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.db.models.Model</span></code></a>. Masing-masing model mempunyai sejumlah variabel kelas, setiapnya mewakilkan sebuah bidang basisdata dalam model.</p>\n<p>Setiap bidang diwakilkan oleh contoh dari kelas <a class=\"reference internal\" href=\"/id/4.2/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a> class -- sebagai contoh <a class=\"reference internal\" href=\"/id/4.2/ref/models/fields/#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a> untuk bidang karakter dan <a class=\"reference internal\" href=\"/id/4.2/ref/models/fields/#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></code></a> 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/4.2/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a> (sebagai contoh question_text` or <code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></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/4.2/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></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\"><span class=\"pre\">Question.pub_date</span></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/4.2/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a> mempunyai argumen wajib. <a class=\"reference internal\" href=\"/id/4.2/ref/models/fields/#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a>, sebagai contoh, membutuhkan anda memberikannya sebuah <a class=\"reference internal\" href=\"/id/4.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\"><span class=\"pre\">max_length</span></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/4.2/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a> dapa juga mempunyai beragam argumen pilihan; dalam kasus ini, kami telah menyetel nilai <a class=\"reference internal\" href=\"/id/4.2/ref/models/fields/#django.db.models.Field.default\" title=\"django.db.models.Field.default\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">default</span></code></a> dari <code class=\"docutils literal notranslate\"><span class=\"pre\">pilih</span></code> ke 0.</p>\n<p>Akhirnya, catatan hubungan ditentukan, menggunakan  <a class=\"reference internal\" href=\"/id/4.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a>. Yang mengatakan Django setiap <code class=\"docutils literal notranslate\"><span class=\"pre\">Choice</span></code> terhubung pada <code class=\"docutils literal notranslate\"><span class=\"pre\">Question</span></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\"><span class=\"pre\">CREATE</span> <span class=\"pre\">TABLE</span></code>) untuk aplikasi ini.</p></li>\n<li><p>Buat API akses-basisdata Phyton untuk mengakses obyek <code class=\"docutils literal notranslate\"><span class=\"pre\">Pertanyaan</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">Pilihan</span></code>.</p></li>\n</ul>\n<p>Tetapi pertama kami butuh untuk memberitahu proyek kam bahwa aplikasi <code class=\"docutils literal notranslate\"><span class=\"pre\">jejak</span> <span class=\"pre\">pendapat</span></code> telah terpasang.</p>\n<aside class=\"admonition-philosophy admonition\">\n<p class=\"admonition-title\">Filosofi</p>\n<p>Aplikasi Django dapat <code class=\"docutils literal notranslate\"><span class=\"pre\">ditanam</span></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/4.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>. Kelas <code class=\"docutils literal notranslate\"><span class=\"pre\">PollsConfig</span></code> ada di berkas <code class=\"file docutils literal notranslate\"><span class=\"pre\">polls/apps.py</span></code>, jadi jalur bertitiknya adalah <code class=\"docutils literal notranslate\"><span class=\"pre\">'polls.apps.PollsConfig'</span></code>. Sunting berkas <code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/settings.py</span></code> dan tambah jalur bertitik itu ke pengaturan <a class=\"reference internal\" href=\"/id/4.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>. itu akan terlihat seperti ini:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">mysite/settings.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"n\">INSTALLED_APPS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s2\">&quot;polls.apps.PollsConfig&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.admin&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.contenttypes&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.sessions&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.messages&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.staticfiles&quot;</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\"><span class=\"pre\">polls</span></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<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>makemigrations<span class=\"w\"> </span>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 Question\n    - Create model Choice\n</code></pre></div>\n<p>Dengan menjalankan <code class=\"docutils literal notranslate\"><span class=\"pre\">makemigrations</span></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>Perpindahan adalah bagaimana Django menyimpan perubahan ke model anda (dan dengan demikian skema basisdata anda) - mereka adalah berkas-berkas di cakram. Anda dapat membaca perpindahan untuk model baru anda jika anda suka; itu adalah berkas <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/migrations/0001_initial.py</span></code>. Jangan khawatir, anda tidak diharapkan membaca mereka setiap waktu Django membuatnya, tetapi mereka dirancang untuk menjadi dapat-disunting-manusia dalam kasus anda ingin secara manual mengutik 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/4.2/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></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/4.2/ref/django-admin/#django-admin-sqlmigrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">sqlmigrate</span></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<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>sqlmigrate<span class=\"w\"> </span>polls<span class=\"w\"> </span><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 Question</span>\n<span class=\"c1\">--</span>\n<span class=\"k\">CREATE</span><span class=\"w\"> </span><span class=\"k\">TABLE</span><span class=\"w\"> </span><span class=\"ss\">&quot;polls_question&quot;</span><span class=\"w\"> </span><span class=\"p\">(</span>\n<span class=\"w\">    </span><span class=\"ss\">&quot;id&quot;</span><span class=\"w\"> </span><span class=\"nb\">bigint</span><span class=\"w\"> </span><span class=\"k\">NOT</span><span class=\"w\"> </span><span class=\"k\">NULL</span><span class=\"w\"> </span><span class=\"k\">PRIMARY</span><span class=\"w\"> </span><span class=\"k\">KEY</span><span class=\"w\"> </span><span class=\"k\">GENERATED</span><span class=\"w\"> </span><span class=\"k\">BY</span><span class=\"w\"> </span><span class=\"k\">DEFAULT</span><span class=\"w\"> </span><span class=\"k\">AS</span><span class=\"w\"> </span><span class=\"k\">IDENTITY</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"ss\">&quot;question_text&quot;</span><span class=\"w\"> </span><span class=\"nb\">varchar</span><span class=\"p\">(</span><span class=\"mi\">200</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">NOT</span><span class=\"w\"> </span><span class=\"k\">NULL</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"ss\">&quot;pub_date&quot;</span><span class=\"w\"> </span><span class=\"k\">timestamp</span><span class=\"w\"> </span><span class=\"k\">with</span><span class=\"w\"> </span><span class=\"k\">time</span><span class=\"w\"> </span><span class=\"k\">zone</span><span class=\"w\"> </span><span class=\"k\">NOT</span><span class=\"w\"> </span><span class=\"k\">NULL</span>\n<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=\"w\"> </span><span class=\"k\">TABLE</span><span class=\"w\"> </span><span class=\"ss\">&quot;polls_choice&quot;</span><span class=\"w\"> </span><span class=\"p\">(</span>\n<span class=\"w\">    </span><span class=\"ss\">&quot;id&quot;</span><span class=\"w\"> </span><span class=\"nb\">bigint</span><span class=\"w\"> </span><span class=\"k\">NOT</span><span class=\"w\"> </span><span class=\"k\">NULL</span><span class=\"w\"> </span><span class=\"k\">PRIMARY</span><span class=\"w\"> </span><span class=\"k\">KEY</span><span class=\"w\"> </span><span class=\"k\">GENERATED</span><span class=\"w\"> </span><span class=\"k\">BY</span><span class=\"w\"> </span><span class=\"k\">DEFAULT</span><span class=\"w\"> </span><span class=\"k\">AS</span><span class=\"w\"> </span><span class=\"k\">IDENTITY</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"ss\">&quot;choice_text&quot;</span><span class=\"w\"> </span><span class=\"nb\">varchar</span><span class=\"p\">(</span><span class=\"mi\">200</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">NOT</span><span class=\"w\"> </span><span class=\"k\">NULL</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"ss\">&quot;votes&quot;</span><span class=\"w\"> </span><span class=\"nb\">integer</span><span class=\"w\"> </span><span class=\"k\">NOT</span><span class=\"w\"> </span><span class=\"k\">NULL</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"ss\">&quot;question_id&quot;</span><span class=\"w\"> </span><span class=\"nb\">bigint</span><span class=\"w\"> </span><span class=\"k\">NOT</span><span class=\"w\"> </span><span class=\"k\">NULL</span>\n<span class=\"p\">);</span>\n<span class=\"k\">ALTER</span><span class=\"w\"> </span><span class=\"k\">TABLE</span><span class=\"w\"> </span><span class=\"ss\">&quot;polls_choice&quot;</span>\n<span class=\"w\">  </span><span class=\"k\">ADD</span><span class=\"w\"> </span><span class=\"k\">CONSTRAINT</span><span class=\"w\"> </span><span class=\"ss\">&quot;polls_choice_question_id_c5b4b260_fk_polls_question_id&quot;</span>\n<span class=\"w\">    </span><span class=\"k\">FOREIGN</span><span class=\"w\"> </span><span class=\"k\">KEY</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"ss\">&quot;question_id&quot;</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"k\">REFERENCES</span><span class=\"w\"> </span><span class=\"ss\">&quot;polls_question&quot;</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"ss\">&quot;id&quot;</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"k\">DEFERRABLE</span><span class=\"w\"> </span><span class=\"k\">INITIALLY</span><span class=\"w\"> </span><span class=\"k\">DEFERRED</span><span class=\"p\">;</span>\n<span class=\"k\">CREATE</span><span class=\"w\"> </span><span class=\"k\">INDEX</span><span class=\"w\"> </span><span class=\"ss\">&quot;polls_choice_question_id_c5b4b260&quot;</span><span class=\"w\"> </span><span class=\"k\">ON</span><span class=\"w\"> </span><span class=\"ss\">&quot;polls_choice&quot;</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"ss\">&quot;question_id&quot;</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\"><span class=\"pre\">polls</span></code>) dan nama huruf kecil dari model -- <code class=\"docutils literal notranslate\"><span class=\"pre\">question</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">choice</span></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\"><span class=\"pre\">&quot;_id&quot;</span></code> ke nama bidang foreign key. (Ya, anda dapat menimpa ini, juga.)</p></li>\n<li><p>Hubungan foreign key dibuat jelas dengan batasan <code class=\"docutils literal notranslate\"><span class=\"pre\">FOREIGN</span> <span class=\"pre\">KEY</span></code>. Jangan khawatir mengenai bagian <code class=\"docutils literal notranslate\"><span class=\"pre\">DEFERRABLE</span></code>; itu menceritakan PostgreSQL agar tidak memaksa foreign key sampai akhir transaksi.</p></li>\n<li><p>Itu disesuaikan ke basisdata yang anda sedang gunakan, sehingga jenis-jenis bidang khusus-basisdata seperti <code class=\"docutils literal notranslate\"><span class=\"pre\">auto_increment</span></code> (MySQL), <code class=\"docutils literal notranslate\"><span class=\"pre\">bigint</span> <span class=\"pre\">PRIMARY</span> <span class=\"pre\">KEY</span> <span class=\"pre\">GENERATED</span> <span class=\"pre\">BY</span> <span class=\"pre\">DEFAULT</span> <span class=\"pre\">AS</span> <span class=\"pre\">IDENTITY</span></code> (PostgreSQL), atau <code class=\"docutils literal notranslate\"><span class=\"pre\">integer</span> <span class=\"pre\">primary</span> <span class=\"pre\">key</span> <span class=\"pre\">autoincrement</span></code> (SQLite) ditangani untuk anda secara otomatis. Sama berlaku untuk mengutip nama bidang -- yaitu, menggunakan kutip ganda dan kutip tunggal.</p></li>\n<li><p>Perintah <a class=\"reference internal\" href=\"/id/4.2/ref/django-admin/#django-admin-sqlmigrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">sqlmigrate</span></code></a> sebenarnya tidak menjalankan perpindahan pada basisdata anda - malahan, itu mencetak nya ke layar shingga anda dapat melihat apa yang Django SQL pikir dibutuhkan. Itu sangat berguna untuk memeriksa apak yang Django akan lakukan atau jika anda memiliki administrator basisdata 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/4.2/ref/django-admin/#django-admin-check\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">python</span> <span class=\"pre\">periksa</span> <span class=\"pre\">manage.py</span></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/4.2/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></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<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>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/4.2/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></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\"><span class=\"pre\">django_migrations</span></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/4.2/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">python</span> <span class=\"pre\">manage.py</span> <span class=\"pre\">makemigrations</span></code></a> untuk membuat perpindahan tempat untuk perubahan tersebut</p></li>\n<li><p>Jalankan <a class=\"reference internal\" href=\"/id/4.2/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">python</span> <span class=\"pre\">manage.py</span> <span class=\"pre\">migrate</span></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/4.2/ref/django-admin/\"><span class=\"doc\">django-admin documentation</span></a> untuk informasi penuh pada apa kegunaan <code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span></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<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>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 hanya mengetik &quot;python&quot;, karena <code class=\"file docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> menyetel variabel lingkungan <span class=\"target\" id=\"index-2\"></span><a class=\"reference internal\" href=\"/id/4.2/topics/settings/#envvar-DJANGO_SETTINGS_MODULE\"><code class=\"xref std std-envvar docutils literal notranslate\"><span class=\"pre\">DJANGO_SETTINGS_MODULE</span></code></a>, yang memberikan Django jalur impor Python ke berkas <code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/settings.py</span></code> anda.</p>\n<p>Once you're in the shell, explore the <a class=\"reference internal\" href=\"/id/4.2/topics/db/queries/\"><span class=\"doc\">database API</span></a>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">polls.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Choice</span><span class=\"p\">,</span> <span class=\"n\">Question</span>  <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><span class=\"n\">Question</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><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=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">timezone</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span> <span class=\"o\">=</span> <span class=\"n\">Question</span><span class=\"p\">(</span><span class=\"n\">question_text</span><span class=\"o\">=</span><span class=\"s2\">&quot;What&#39;s new?&quot;</span><span class=\"p\">,</span> <span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><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><span class=\"n\">q</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n<span class=\"go\"># Now it has an ID.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span><span class=\"o\">.</span><span class=\"n\">id</span>\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><span class=\"n\">q</span><span class=\"o\">.</span><span class=\"n\">question_text</span>\n<span class=\"go\">&quot;What&#39;s new?&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span><span class=\"o\">.</span><span class=\"n\">pub_date</span>\n<span class=\"go\">datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=datetime.timezone.utc)</span>\n\n<span class=\"go\"># Change values by changing the attributes, then calling save().</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span><span class=\"o\">.</span><span class=\"n\">question_text</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;What&#39;s up?&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span><span class=\"o\">.</span><span class=\"n\">save</span><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><span class=\"n\">Question</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><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\"><span class=\"pre\">&lt;Question:</span> <span class=\"pre\">Question</span> <span class=\"pre\">object</span> <span class=\"pre\">(1)&gt;</span></code> bukanlah perwakilan membantu dari obyek ini. Mari kita perbaiki itu dengan menyunting modl <code class=\"docutils literal notranslate\"><span class=\"pre\">Question</span></code> (dalam berkas  <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/models.py</span></code>) dan menambahkan sebuah metode <a class=\"reference internal\" href=\"/id/4.2/ref/models/instances/#django.db.models.Model.__str__\" title=\"django.db.models.Model.__str__\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">__str__()</span></code></a> pada kedua <code class=\"docutils literal notranslate\"><span class=\"pre\">Question</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">Choice</span></code>:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">polls/models.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Question</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_text</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Choice</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">choice_text</span>\n</code></pre></figure>\n<p>Sangat penting menambahkan cara <a class=\"reference internal\" href=\"/id/4.2/ref/models/instances/#django.db.models.Model.__str__\" title=\"django.db.models.Model.__str__\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">__str__()</span></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\">Mari kita tambahkan sebuah metode penyesuaian pada model ini:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">polls/models.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">datetime</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">timezone</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Question</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"k\">def</span><span class=\"w\"> </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><span class=\"n\">pub_date</span> <span class=\"o\">&gt;=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><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\"><span class=\"pre\">import</span> <span class=\"pre\">datetime</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">from</span> <span class=\"pre\">django.utils</span> <span class=\"pre\">import</span> <span class=\"pre\">timezone</span></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\"><span class=\"pre\">datetime</span></code></a> dan kegunaan zona-waktu-terhubung Django di <a class=\"reference internal\" href=\"/id/4.2/ref/utils/#module-django.utils.timezone\" title=\"django.utils.timezone: Timezone support.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.utils.timezone</span></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/4.2/topics/i18n/timezones/\"><span class=\"doc\">dokumen dukungan zona waktu</span></a>.</p>\n<p>Save these changes and start a new Python interactive shell by running\n<code class=\"docutils literal notranslate\"><span class=\"pre\">python</span> <span class=\"pre\">manage.py</span> <span class=\"pre\">shell</span></code> again:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">polls.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Choice</span><span class=\"p\">,</span> <span class=\"n\">Question</span>\n\n<span class=\"go\"># Make sure our __str__() addition worked.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Question</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</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\"># 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><span class=\"n\">Question</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"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><span class=\"n\">Question</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">question_text__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;What&quot;</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=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">timezone</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">current_year</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">year</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Question</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pub_date__year</span><span class=\"o\">=</span><span class=\"n\">current_year</span><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><span class=\"n\">Question</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"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=\"w\">    </span><span class=\"o\">...</span>\n<span class=\"gr\">DoesNotExist</span>: <span class=\"n\">Question matching query does not exist.</span>\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><span class=\"n\">Question</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"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><span class=\"n\">q</span> <span class=\"o\">=</span> <span class=\"n\">Question</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span><span class=\"o\">.</span><span class=\"n\">was_published_recently</span><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><span class=\"n\">q</span> <span class=\"o\">=</span> <span class=\"n\">Question</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n<span class=\"go\"># Display any choices from the related object set -- none so far.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span><span class=\"o\">.</span><span class=\"n\">choice_set</span><span class=\"o\">.</span><span class=\"n\">all</span><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><span class=\"n\">q</span><span class=\"o\">.</span><span class=\"n\">choice_set</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">choice_text</span><span class=\"o\">=</span><span class=\"s2\">&quot;Not much&quot;</span><span class=\"p\">,</span> <span class=\"n\">votes</span><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><span class=\"n\">q</span><span class=\"o\">.</span><span class=\"n\">choice_set</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">choice_text</span><span class=\"o\">=</span><span class=\"s2\">&quot;The sky&quot;</span><span class=\"p\">,</span> <span class=\"n\">votes</span><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><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">q</span><span class=\"o\">.</span><span class=\"n\">choice_set</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">choice_text</span><span class=\"o\">=</span><span class=\"s2\">&quot;Just hacking again&quot;</span><span class=\"p\">,</span> <span class=\"n\">votes</span><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><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">question</span>\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><span class=\"n\">q</span><span class=\"o\">.</span><span class=\"n\">choice_set</span><span class=\"o\">.</span><span class=\"n\">all</span><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><span class=\"n\">q</span><span class=\"o\">.</span><span class=\"n\">choice_set</span><span class=\"o\">.</span><span class=\"n\">count</span><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><span class=\"n\">Choice</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">question__pub_date__year</span><span class=\"o\">=</span><span class=\"n\">current_year</span><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><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">q</span><span class=\"o\">.</span><span class=\"n\">choice_set</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">choice_text__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;Just hacking&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Untuk informasi lebih di kaitan model, lihat <a class=\"reference internal\" href=\"/id/4.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/4.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/4.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\">\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<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>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<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>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 peramban jaringan dan pergi ke &quot;/admin/&quot; di domain lokal anda -- yaitu, <a class=\"reference external\" href=\"http://127.0.0.1:8000/admin/\">http://127.0.0.1:8000/admin/</a>. Anda seharusnya melihan layar masuk admin:</p>\n<img alt=\"Layar masuk admin Django\" src=\"/id/4.2/_images/admin01.png\" />\n<p>Sejak <a class=\"reference internal\" href=\"/id/4.2/topics/i18n/translation/\"><span class=\"doc\">translation</span></a> dinyalakan secara awalan, jika anda mensetel <a class=\"reference internal\" href=\"/id/4.2/ref/settings/#std-setting-LANGUAGE_CODE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGE_CODE</span></code></a>, layar masuk akan ditampilkan dalam bahasa yang diberikan (jika Django memiliki terjemahan yang sesuai).</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=\"Halaman indeks admin Django\" src=\"/id/4.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/4.2/topics/auth/#module-django.contrib.auth\" title=\"django.contrib.auth: Django's authentication framework.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.auth</span></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 lagi untuk dilakukan: kami butuh memberitahu admin bahwa obyek <code class=\"docutils literal notranslate\"><span class=\"pre\">Question</span></code> memiliki antarmuka admin. Untuk melakukan ini, buka berkas <code class=\"file docutils literal notranslate\"><span class=\"pre\">polls/admin.py</span></code>, dan sunting itu untuk terlihat seperti ini:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">polls/admin.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Question</span>\n\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">Question</span><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\"><span class=\"pre\">Question</span></code>, Django mengetahui bahwa itu harus ditampilkan di halaman index admin:</p>\n<img alt=\"Halaman indeks admin Django, sekarang dengan pemungutan suara ditampilkan\" src=\"/id/4.2/_images/admin03t.png\" />\n<p>Klik <code class=\"docutils literal notranslate\"><span class=\"pre\">Question</span></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=\"Halaman daftar rubah pemungutan suara\" src=\"/id/4.2/_images/admin04t.png\" />\n<p>Klik pertanyaan &quot;Ada apa?&quot; untuk menyuntingnya:</p>\n<img alt=\"Menyunting formulir untuk objek pertanyaan\" src=\"/id/4.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\"><span class=\"pre\">Question</span></code>.</p></li>\n<li><p>Jenis bidang model berbeda ((<a class=\"reference internal\" href=\"/id/4.2/ref/models/fields/#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></code></a>, <a class=\"reference internal\" href=\"/id/4.2/ref/models/fields/#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a>) 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/4.2/ref/models/fields/#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></code></a> 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/4.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/4.2/ref/settings/#std-setting-TIME_ZONE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TIME_ZONE</span></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=\"Halaman riwayat untuk objek pertanyaan\" src=\"/id/4.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/4.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/4.2/intro/"}],"prev":{"docname":"intro/tutorial01","title":"Menulis aplikasi Django pertama anda, bagian 1","url":"/id/4.2/intro/tutorial01/"},"next":{"docname":"intro/tutorial03","title":"Menulis aplikasi Django pertama anda, bagian 3","url":"/id/4.2/intro/tutorial03/"},"formats":{"html":"/id/4.2/intro/tutorial02/","markdown":"/id/4.2/intro/tutorial02.md","json":"/id/4.2/intro/tutorial02.json"},"source":"https://github.com/django/django/blob/stable/4.2.x/docs/intro/tutorial02.txt","official":"https://docs.djangoproject.com/id/4.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","it","pt-br","ko","es","el","pl"]}