{"title":"Menulis aplikasi Django kedua anda, bagian 2","version":"6.1","locale":"id","docname":"intro/tutorial02","url":"/id/6.1/intro/tutorial02/","canonical":"https://djangodocs.dev/id/6.1/intro/tutorial02/","summary":"Ttutorial ini memulai dimana Tutorial 1 ditinggalkan. Kami akan menyetelbasisdata, buat model pertama anda, dan dapatkan pengenalan cepat pada…","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/6.1/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\" role=\"note\">\n<p class=\"admonition-title\">Dimana mendapatkan bantuan:</p>\n<p>Jika anda memiliki masalah melalui tutorial ini, harap geser ke <a class=\"reference internal\" href=\"/id/6.1/faq/help/\"><span class=\"doc\">Getting Help</span></a> bagian dari FAQ.</p>\n</aside>\n<section id=\"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>By default, the <a class=\"reference internal\" href=\"/id/6.1/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\">DATABASES</code></a> configuration uses SQLite. If you're new\nto databases, or you're just interested in trying Django, this is the easiest\nchoice. SQLite is included in Python, so you won't need to install anything\nelse to support your database. When starting your first real project, however,\nyou may want to use a more scalable database like PostgreSQL, to avoid\ndatabase-switching headaches down the road.</p>\n<p>If you wish to use another database, see <a class=\"reference internal\" href=\"/id/6.1/topics/install/#database-installation\"><span class=\"std std-ref\">details to customize and get\nyour database running</span></a>.</p>\n<p>Ketika anda menyunting <code class=\"file docutils literal notranslate\">mysite/settings.py</code>, setel <a class=\"reference internal\" href=\"/id/6.1/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/6.1/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/6.1/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/6.1/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/6.1/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/6.1/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/6.1/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/6.1/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/6.1/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">migrate</code></a> mencari <a class=\"reference internal\" href=\"/id/6.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> setelan dan membuat tabel database yang diperlukan menurut pengaturan basisdata anda dalam berkas <code class=\"file docutils literal notranslate\">mysite/settings.py</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\">\\dt</code> (PostgreSQL), <code class=\"docutils literal notranslate\">SHOW TABLES;</code> (MariaDB, MySQL), <code class=\"docutils literal notranslate\">.tables</code> (SQLite), atau <code class=\"docutils literal notranslate\">SELECT TABLE_NAME FROM USER_TABLES;</code> (Oracle) untuk menampilkan tabel-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/6.1/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/6.1/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/6.1/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/6.1/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 informasi tentang data anda. Itu mengandung bidang yang diperlukan dan perilaku dari data anda sedang simpan. Django mengikuti <a class=\"reference internal\" href=\"/id/6.1/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>This includes the migrations, which are derived from your models file.\nThey form a history that Django uses to update your database schema\nto match your current models.</p>\n</aside>\n<p>Dalam aplikasi jejak pendapat kami, kami akan membuat dua model: <code class=\"docutils literal notranslate\">Question</code> dan <code class=\"docutils literal notranslate\">Choice</code>. <code class=\"docutils literal notranslate\">Question</code> memiliki pertanyaan dan tanggal penerbitan. <code class=\"docutils literal notranslate\">Choice</code> memiliki dua bidang: teks dari pilihan dan perhitungan pilihan. Setiap <code class=\"docutils literal notranslate\">Choice</code> dikaitkan dengan <code class=\"docutils literal notranslate\">Question</code>.</p>\n<p>Konsep ini diwakilkan oleh kelas Python. Sunting berkas <code class=\"file docutils literal notranslate\">polls/models.py</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\">polls/models.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.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=\"s2\">&quot;date published&quot;</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>Disini, setiap model diwakilkan dengan kelas yang subkelas <a class=\"reference internal\" href=\"/id/6.1/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>. 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/6.1/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/6.1/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/6.1/ref/models/fields/#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\">DateTimeField</code></a> 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/6.1/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/6.1/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/6.1/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/6.1/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/6.1/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/6.1/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/6.1/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/6.1/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a>. 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/6.1/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/6.1/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\"><code class=\"docutils literal notranslate\">mysite/settings.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code>INSTALLED_APPS <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\">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 Question\n    + Create model 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>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\">polls/migrations/0001_initial.py</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>Jika anda tertarik, anda dapat juga menjalankan <a class=\"reference internal\" href=\"/id/6.1/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/6.1/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-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 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\">  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-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 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\">  Applying polls.0001_initial... OK</span>\n</code></pre></div></div></div>\n<p>Perintah <a class=\"reference internal\" href=\"/id/6.1/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>Run <a class=\"reference internal\" href=\"/id/6.1/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\">python manage.py makemigrations</code></a> to create\nmigrations for those changes.</p></li>\n<li><p>Jalankan <a class=\"reference internal\" href=\"/id/6.1/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>See <a class=\"reference internal\" href=\"/id/6.1/topics/migrations/\"><span class=\"doc\">Perpindahan</span></a> for the full details, including how to inspect\nthe SQL a migration will run with <a class=\"reference internal\" href=\"/id/6.1/ref/django-admin/#django-admin-sqlmigrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">sqlmigrate</code></a> (see\n<a class=\"reference internal\" href=\"/id/6.1/topics/migrations/#executing-sqlmigrate\"><span class=\"std std-ref\">Executing sqlmigrate</span></a>).</p>\n<p>Baca  <a class=\"reference internal\" href=\"/id/6.1/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-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 shell\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 shell\n</code></pre></div></div></div>\n<p>We're using this instead of simply typing &quot;python&quot;, because <code class=\"file docutils literal notranslate\">manage.py</code>\nsets the <span class=\"target\" id=\"index-0\"></span><a class=\"reference internal\" href=\"/id/6.1/topics/settings/#envvar-DJANGO_SETTINGS_MODULE\"><code class=\"xref std std-envvar docutils literal notranslate\">DJANGO_SETTINGS_MODULE</code></a> environment variable, which gives\nDjango the Python import path to your <code class=\"file docutils literal notranslate\">mysite/settings.py</code> file.\nBy default, the <a class=\"reference internal\" href=\"/id/6.1/ref/django-admin/#django-admin-shell\"><code class=\"xref std std-djadmin docutils literal notranslate\">shell</code></a> command automatically imports the models from\nyour <a class=\"reference internal\" href=\"/id/6.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>.</p>\n<p>Once you're in the shell, explore the <a class=\"reference internal\" href=\"/id/6.1/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=\"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=datetime.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>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/6.1/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\"><code class=\"docutils literal notranslate\">polls/models.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.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    <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\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/6.1/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\">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\">polls/models.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">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/6.1/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/6.1/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. (If a\nthree-chevron prompt (&gt;&gt;&gt;) indicates you are still in the shell, you need to\nexit first using <code class=\"docutils literal notranslate\">exit()</code>). Run <code class=\"docutils literal notranslate\">python manage.py shell</code> again to reload\nthe models.</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=\"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=\"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=\"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 (defined as &quot;choice_set&quot;) to hold the &quot;other side&quot; of a ForeignKey</span>\n<span class=\"go\"># relation (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=\"s2\">&quot;Not much&quot;</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=\"s2\">&quot;The sky&quot;</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=\"s2\">&quot;Just hacking again&quot;</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=\"s2\">&quot;Just hacking&quot;</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/6.1/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/6.1/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/6.1/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-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 createsuperuser\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 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-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 runserver\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 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/6.1/_images/admin01.png\" />\n<p>Sejak <a class=\"reference internal\" href=\"/id/6.1/topics/i18n/translation/\"><span class=\"doc\">translation</span></a> dinyalakan secara awalan, jika anda mensetel <a class=\"reference internal\" href=\"/id/6.1/ref/settings/#std-setting-LANGUAGE_CODE\"><code class=\"xref std std-setting docutils literal notranslate\">LANGUAGE_CODE</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/6.1/_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/6.1/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 lagi untuk dilakukan: kami butuh memberitahu admin bahwa obyek <code class=\"docutils literal notranslate\">Question</code> memiliki antarmuka admin. Untuk melakukan ini, buka berkas <code class=\"file docutils literal notranslate\">polls/admin.py</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\">polls/admin.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"kn\">import</span> Question\n\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=\"Halaman indeks admin Django, sekarang dengan pemungutan suara ditampilkan\" src=\"/id/6.1/_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=\"Halaman daftar rubah pemungutan suara\" src=\"/id/6.1/_images/admin04t.png\" />\n<p>Klik pertanyaan &quot;Ada apa?&quot; untuk menyuntingnya:</p>\n<img alt=\"Menyunting formulir untuk objek pertanyaan\" src=\"/id/6.1/_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/6.1/ref/models/fields/#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\">DateTimeField</code></a>, <a class=\"reference internal\" href=\"/id/6.1/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/6.1/ref/models/fields/#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\">DateTimeField</code></a> 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/6.1/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/6.1/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=\"Halaman riwayat untuk objek pertanyaan\" src=\"/id/6.1/_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/6.1/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/6.1/intro/"}],"prev":{"docname":"intro/tutorial01","title":"Menulis aplikasi Django pertama anda, bagian 1","url":"/id/6.1/intro/tutorial01/"},"next":{"docname":"intro/tutorial03","title":"Menulis aplikasi Django pertama anda, bagian 3","url":"/id/6.1/intro/tutorial03/"},"formats":{"html":"/id/6.1/intro/tutorial02/","markdown":"/id/6.1/intro/tutorial02.md","json":"/id/6.1/intro/tutorial02.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/intro/tutorial02.txt","official":"https://docs.djangoproject.com/id/6.1/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","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}