{"title":"Aplikasi","version":"5.2","locale":"id","docname":"ref/applications","url":"/id/5.2/ref/applications/","canonical":"https://djangodocs.dev/id/5.2/ref/applications/","summary":"Django mengandung sebuah registrar dari aplikasi terpasang yang menyimpan konfigurasi dan menyediakan introspeksi. Dia juga merawat daftar dari ketersediaan models…","html":"<span id=\"applications\"></span><h1>Aplikasi<a class=\"heading-anchor\" href=\"#module-django.apps\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django mengandung sebuah registrar dari aplikasi terpasang yang menyimpan konfigurasi dan menyediakan introspeksi. Dia juga merawat daftar dari ketersediaan <a class=\"reference internal\" href=\"/id/5.2/topics/db/models/\"><span class=\"doc\">models</span></a>.</p>\n<p>Registri memanggil <a class=\"reference internal\" href=\"#django.apps.apps\" title=\"django.apps.apps\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">apps</span></code></a> dan tersedia dalam <a class=\"reference internal\" href=\"#module-django.apps\" title=\"django.apps\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.apps</span></code></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\">django.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">apps</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">get_app_config</span><span class=\"p\">(</span><span class=\"s2\">&quot;admin&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">verbose_name</span>\n<span class=\"go\">&#39;Administration&#39;</span>\n</code></pre></div>\n<section id=\"projects-and-applications\">\n<h2>Proyek dan aplikasi<a class=\"heading-anchor\" href=\"#projects-and-applications\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Istilah <strong>proyek</strong> menggambarkan sebuah aplikasi jaringan Django. Proyek paket Python ditentukan terutama dengan mengatur modul, tetapi biasanya mengandung hal lain. Sebagai contoh, ketika anda menjalankan <code class=\"docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">startproject</span> <span class=\"pre\">mysite</span></code> anda akan mendapatkan sebuah direktori proyek <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite</span></code> yang mengandung sebuah paket Python <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite</span></code> dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">urls.py</span></code>, dan <code class=\"docutils literal notranslate\"><span class=\"pre\">wsgi.py</span></code>. Paket proyek sering diperluas untuk disertakan untuk menyertakan hal-hal seperti perbaikan, CSS, dan cetakan yang tidak diikat ke aplikasi tertentu.</p>\n<p>Sebuah <strong>direktori akar proyek</strong> (satu yang mengandung <code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span></code>) biasanya mengandung semua aplikasi proyek yang tidak dipasang secara terpisah.</p>\n<p>Istilah <strong>aplikasi</strong> menggambarkan paket Python yang menyediakan beberapa kumpulan fitur. Aplikasi <a class=\"reference internal\" href=\"/id/5.2/intro/reusable-apps/\"><span class=\"doc\">may be reused</span></a> di beragam proyek.</p>\n<p>Aplikasi menyertakan beberapa kombinasi model, tampilan, cetakan, etiket cetakan, berkas tetap, URL, middleware, dll. Mereka umumnya diikat kedalam proyek dengan pengaturan <a class=\"reference internal\" href=\"/id/5.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> dan secara pilihan dengan mekanisme lain seperti URLconf, pengaturan <a class=\"reference internal\" href=\"/id/5.2/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a>, atau warisan cetakan.</p>\n<p>Sangat penting untuk dimengerti bahwa aplikasi Django hanyalah kumpulan kode yang saling mempengaruhi dengan beragam bagian dari kerangka. Tidak ada sesuatu seperti obyek <code class=\"docutils literal notranslate\"><span class=\"pre\">Aplikasi</span></code>. Bagaimanapun, terdapat sedikit tempat dimana Django butuh saling mempengaruhi dengan aplikasi terpasang, terutama untuk konfigurasi dan juga untuk introspeksi. Itu mengapa registrar aplikasi merawat metadata dalam sebuah instance <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> untuk setiap aplikasi terpasang.</p>\n<p>Tidak ada batasan bahwa sebuah paket proyek tidak dapat dianggap sebuah aplikasi dan mempunyai model, dll. (yang akan butuh menambahkannya ke <a class=\"reference internal\" href=\"/id/5.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</section>\n<section id=\"configuring-applications\">\n<span id=\"configuring-applications-ref\"></span><h2>Konfigurasi aplikasi<a class=\"heading-anchor\" href=\"#configuring-applications\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Untuk mengkonfigurasikan sebuah aplikasi, buat sebuah modul <code class=\"docutils literal notranslate\"><span class=\"pre\">apps.py</span></code> di dalam aplikasi, kemudian tentukan sub kelas dari <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> disana.</p>\n<p>Ketika <a class=\"reference internal\" href=\"/id/5.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 jalur bertitik pada modul aplikasi, secara awalan, jika Django menemukan tepatnya satu subkelas <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> dalam submodul <code class=\"docutils literal notranslate\"><span class=\"pre\">apps.py</span></code>, dia menggunakan konfigurasi itu untuk aplikasi. Perilaku ini mungkin ditiadakan dengan menyetel <a class=\"reference internal\" href=\"#django.apps.AppConfig.default\" title=\"django.apps.AppConfig.default\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">AppConfig.default</span></code></a> menjadi <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.</p>\n<p>Jika modul <code class=\"docutils literal notranslate\"><span class=\"pre\">apps.py</span></code> mengandung lebih dari satu subkelas <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a>, Django akan mencari yang tunggal dimana <a class=\"reference internal\" href=\"#django.apps.AppConfig.default\" title=\"django.apps.AppConfig.default\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">AppConfig.default</span></code></a> adalah <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n<p>Jika tidak ada subkelas <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> ditemukan, kelas dasar <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> akan digunakan.</p>\n<p>Cara lain, <a class=\"reference internal\" href=\"/id/5.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> mungkin mengandung jalur bertitik pada kelas konfigurasi untuk menentukan itu dengan jelas:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">INSTALLED_APPS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"o\">...</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;polls.apps.PollsAppConfig&quot;</span><span class=\"p\">,</span>\n    <span class=\"o\">...</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<section id=\"for-application-authors\">\n<h3>Untuk pengarang aplikasi<a class=\"heading-anchor\" href=\"#for-application-authors\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Jika anda membuat sebuah aplikasi dapat dipasang dipanggil &quot;Rock ’n’ roll&quot;, ini adalah bagaimana anda akan menyediakan sebuah nama pantas untuk admin:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># rock_n_roll/apps.py</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">AppConfig</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">RockNRollConfig</span><span class=\"p\">(</span><span class=\"n\">AppConfig</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;rock_n_roll&quot;</span>\n    <span class=\"n\">verbose_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Rock ’n’ roll&quot;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">RockNRollConfig</span></code> akan dimuiat secara otomatis ketika <a class=\"reference internal\" href=\"/id/5.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 <code class=\"docutils literal notranslate\"><span class=\"pre\">'rock_n_roll'</span></code>. Jika anda ingin mencegah ini, setel <a class=\"reference internal\" href=\"#django.apps.AppConfig.default\" title=\"django.apps.AppConfig.default\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">default</span></code></a> menjadi <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> dalam pendefinisian kelas.</p>\n<p>Anda dapat menyediakan beberapa subkelas <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> dengan perilaku berbeda. Untuk memberitahu Django yang mana akan digunakan secara awalan, setel <a class=\"reference internal\" href=\"#django.apps.AppConfig.default\" title=\"django.apps.AppConfig.default\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">default</span></code></a> menjadi <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> dalam pendefinisiannya. Jika pengguna anda ingin mengambil konfigurasi bukan-awalan, mereka harus mengganti <code class=\"docutils literal notranslate\"><span class=\"pre\">'rock_n_roll'</span></code> dengan jalur bertitik ke kelas spesifik dalam pengaturan <a class=\"reference internal\" href=\"/id/5.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> mereka.</p>\n<p>Atribut <a class=\"reference internal\" href=\"#django.apps.AppConfig.name\" title=\"django.apps.AppConfig.name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">AppConfig.name</span></code></a> memberitahu Django aplikasi mana konfigurasi ini diberlakukan. Anda dapat menentukan atribut lain apapun terdokumentasi dalam acuan API <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a>.</p>\n<p>Subkelas <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> dapat ditentukan dimanapun. <code class=\"docutils literal notranslate\"><span class=\"pre\">apps.py</span></code> konvensi semata mengizinkan Django memuat mereka otomatis ketika <a class=\"reference internal\" href=\"/id/5.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 jalur pada modul aplikasi daripada jalur pada kelas konfigurasi.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Catatan</p>\n<p>Jika kode mengimpor registrar aplikasi di <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__.py</span></code> aplikasi, nama <code class=\"docutils literal notranslate\"><span class=\"pre\">apps</span></code> akan bentrok dengan submodul <code class=\"docutils literal notranslate\"><span class=\"pre\">apps</span></code>. Praktik terbaik adalah memindahkan kode tersebut ke submodul dan mengimpornya. Sebuah solusi adalah mengimpor registrar dibawah nama berbeda:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">apps</span> <span class=\"k\">as</span> <span class=\"n\">django_apps</span>\n</code></pre></div>\n</aside>\n</section>\n<section id=\"for-application-users\">\n<h3>Untuk pengguna aplikasi<a class=\"heading-anchor\" href=\"#for-application-users\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Jika anda menggunakan &quot;Rock ’n’ roll&quot; dalam proyek disebut <code class=\"docutils literal notranslate\"><span class=\"pre\">anthology</span></code>, tetapi anda ingin menampilkan &quot;Jazz Manouche&quot;, anda dapat menyediakan konfigurasi anda sendiri:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># anthology/apps.py</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">rock_n_roll.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">RockNRollConfig</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">JazzManoucheConfig</span><span class=\"p\">(</span><span class=\"n\">RockNRollConfig</span><span class=\"p\">):</span>\n    <span class=\"n\">verbose_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Jazz Manouche&quot;</span>\n\n\n<span class=\"c1\"># anthology/settings.py</span>\n\n<span class=\"n\">INSTALLED_APPS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s2\">&quot;anthology.apps.JazzManoucheConfig&quot;</span><span class=\"p\">,</span>\n    <span class=\"c1\"># ...</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Contoh ini menunjukkan kelas-kelas konfigurasi proyek-khusus bertempat dalam submodul disebut <code class=\"docutils literal notranslate\"><span class=\"pre\">apps.py</span></code>. Konvensi ini, bukan sebuah persyaratan. Subkelas <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> mungkin ditentukan dimanasaja.</p>\n<p>Dalam situasi ini, <a class=\"reference internal\" href=\"/id/5.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> harus mengandung jalur bertitik pada kelas konfigurasi karena itu berada diluar dari aplikasi dan dengan demikian tidak dapat otomatis dikenali.</p>\n</section>\n</section>\n<section id=\"application-configuration\">\n<h2>Konfigurasi aplikasi<a class=\"heading-anchor\" href=\"#application-configuration\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AppConfig</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Konfigurasi aplikasi obyek menyimpan metadata untuk sebuah aplikasi. Beberapa atribut dapat dikonfigurasikan di subkelas <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a>. Lainnya disetel oleh Django dan hanya-baca.</p>\n</dd></dl>\n\n<section id=\"configurable-attributes\">\n<h3>Atribut dapat dikonfigurasi<a class=\"heading-anchor\" href=\"#configurable-attributes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.name\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">name</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Jalur Phyton penuh ke aplikasi, misalnya <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.admin'</span></code>.</p>\n<p>Atribut ini menentukan konfigurasi aplikasi mana yang berlaku. DIa harus disetel di semua subkelas <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a>.</p>\n<p>Dia harus unik terhadap proyek Django.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.label\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">label</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.label\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Nama pendek untuk aplikasi, misalnya <code class=\"docutils literal notranslate\"><span class=\"pre\">'admin'</span></code></p>\n<p>Atribut ini mengizinkan melabel kembali sebuah aplikasi ketika dua aplikasi mempunyai label bertentangan. Awal dia ke komponen terakhir dari <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code>. Dia harus penciri Python yang sah.</p>\n<p>Dia harus unik terhadap proyek Django.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Peringatan</p>\n<p>Changing this attribute after migrations have been applied for an\napplication will result in breaking changes to a project or, in the\ncase of a reusable app, any existing installs of that app. This is\nbecause <code class=\"docutils literal notranslate\"><span class=\"pre\">AppConfig.label</span></code> is used in database tables and migration\nfiles when referencing an app in the dependencies list.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.verbose_name\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">verbose_name</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.verbose_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Nama dapat dibaca manusia untuk aplikasi, misalnya &quot;Administrasi&quot;.</p>\n<p>Atribut awal ke <code class=\"docutils literal notranslate\"><span class=\"pre\">label.title()</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.path\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">path</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.path\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Jalur sistem berkas pada direktori aplikasi, misalnya <code class=\"docutils literal notranslate\"><span class=\"pre\">'/usr/lib/pythonX.Y/dist-packages/django/contrib/admin'</span></code>.</p>\n<p>Dalam banyak kasus, Django dapat otomatis mengenali dan mengatur ini, tetapi anda dapat juga menyediakan menimpa eksplisit sebagai atribut kelas di subkelas <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> anda. Dalam beberapa situasi ini diwajibkan; sebagai contoh jika paket aplikasi adalah <a class=\"reference internal\" href=\"#namespace-package\">namespace package</a> dengan banyak jalur.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.default\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">default</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.default\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Setel atribut ini menjadi <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> untuk mencegah Django dari memilih kelas konfigurasi secara otomatis. Ini berguna ketika <code class=\"docutils literal notranslate\"><span class=\"pre\">apps.py</span></code> menentukan satu subkelas <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> tetapi anda tidak ingin Django menggunakannya secara awalan.</p>\n<p>Setel atribut ini menjadi <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> untuk memberitahu Django untuk memilih kelas konfigurasi secara otomatis. Ini berguna ketika <code class=\"docutils literal notranslate\"><span class=\"pre\">apps.py</span></code> menentukan lebih dari satu subkelas <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> dan anda ingin Django menggunakan satu dari mereka secara awalan.</p>\n<p>Secara awalan, atribut ini tidak disetel.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.default_auto_field\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">default_auto_field</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.default_auto_field\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Jenis primary key tersirat untuk menambah pada model dalam aplikasi ini. Anda dapat menggunakan ini untuk menjaga <a class=\"reference internal\" href=\"/id/5.2/ref/models/fields/#django.db.models.AutoField\" title=\"django.db.models.AutoField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AutoField</span></code></a> sebagai jenis the primary key untuk aplikasi pihak ketiga.</p>\n<p>Secara awalan, ini adalah nilai dari <a class=\"reference internal\" href=\"/id/5.2/ref/settings/#std-setting-DEFAULT_AUTO_FIELD\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEFAULT_AUTO_FIELD</span></code></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"read-only-attributes\">\n<h3>Atribut hanya-baca<a class=\"heading-anchor\" href=\"#read-only-attributes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.module\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">module</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.module\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>modul utama/akar untuk aplikasi, misalnya &quot;&lt;module 'django.contrib.admin' from 'django/contrib/admin/__init__.py'&gt;&quot;.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.models_module\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">models_module</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.models_module\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Modul yang berisi model, misalnya &quot;&lt;module 'django.contrib.admin.models' from 'django/contrib/admin/models.py'&gt;&quot;.</p>\n<p>Itu mungkin <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> jika aplikasi tidak mengandung sebuah modul <code class=\"docutils literal notranslate\"><span class=\"pre\">models</span></code>. Catat bahwa basisdata terkait sinyal seperti <a class=\"reference internal\" href=\"/id/5.2/ref/signals/#django.db.models.signals.pre_migrate\" title=\"django.db.models.signals.pre_migrate\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">pre_migrate</span></code></a> dan <a class=\"reference internal\" href=\"/id/5.2/ref/signals/#django.db.models.signals.post_migrate\" title=\"django.db.models.signals.post_migrate\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">post_migrate</span></code></a> hanya dimunculkan untuk aplikasi yang mempunyai sebuah modul <code class=\"docutils literal notranslate\"><span class=\"pre\">models</span></code></p>\n</dd></dl>\n\n</section>\n<section id=\"methods\">\n<h3>Cara<a class=\"heading-anchor\" href=\"#methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.get_models\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_models</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">include_auto_created</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">include_swapped</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.get_models\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Mengembalikan kelas <a class=\"reference internal\" href=\"/id/5.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\">Model</span></code></a> berulang untuk aplikasi ini.</p>\n<p>Membutuhkan aplikasi registrar untuk sepenuhnya dikumpulkan.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.get_model\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_model</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">require_ready</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.get_model\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Mengembalikan <a class=\"reference internal\" href=\"/id/5.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\">Model</span></code></a> dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">model_name</span></code> diberikan.  <code class=\"docutils literal notranslate\"><span class=\"pre\">model_name</span></code> adalah tidak sensitif.</p>\n<p>Memunculkan <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#LookupError\" title=\"(di Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">LookupError</span></code></a> jika tidak ada model yang ada dalam aplikasi ini.</p>\n<p>Membutuhkan aplikasi regristrar untuk sepenuhnya dikumpulkan meskipun argumen <code class=\"docutils literal notranslate\"><span class=\"pre\">require_ready</span></code> disetel menjadi <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>. <code class=\"docutils literal notranslate\"><span class=\"pre\">require_ready</span></code> berperilaku tepat seperti dalam <a class=\"reference internal\" href=\"#django.apps.apps.get_model\" title=\"django.apps.apps.get_model\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">apps.get_model()</span></code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.ready\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">ready</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.ready\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Subkelas dapat menimpa metode ini untuk melakukan tugas inisialisasi seperti mendaftarkan sinyal. Dia dipanggil segera ketika registrar dikumpulkan penuh.</p>\n<p>Meskipun anda tidak dapat mengimpor pada tingkat-modul dimana kelas-kelas <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> ditentukan, anda dapat mengimpor <code class=\"docutils literal notranslate\"><span class=\"pre\">ready()</span></code>, menggunakan antara pernyataan <code class=\"docutils literal notranslate\"><span class=\"pre\">import</span></code> atau <a class=\"reference internal\" href=\"#django.apps.AppConfig.get_model\" title=\"django.apps.AppConfig.get_model\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_model()</span></code></a>.</p>\n<p>Jika anda sedang mendaftarkan <a class=\"reference internal\" href=\"/id/5.2/ref/signals/#module-django.db.models.signals\" title=\"django.db.models.signals: Signals sent by the model system.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">model</span> <span class=\"pre\">signals</span></code></a>, anda dapat mengacu pada pengirim berdasarkan label deretan karakter nya daripada menggunakan kelas model itu sendiri.</p>\n<p>Contoh:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">AppConfig</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models.signals</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">pre_save</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">RockNRollConfig</span><span class=\"p\">(</span><span class=\"n\">AppConfig</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">ready</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># importing model classes</span>\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\">MyModel</span>  <span class=\"c1\"># or...</span>\n\n        <span class=\"n\">MyModel</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_model</span><span class=\"p\">(</span><span class=\"s2\">&quot;MyModel&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># registering signals with the model&#39;s string label</span>\n        <span class=\"n\">pre_save</span><span class=\"o\">.</span><span class=\"n\">connect</span><span class=\"p\">(</span><span class=\"n\">receiver</span><span class=\"p\">,</span> <span class=\"n\">sender</span><span class=\"o\">=</span><span class=\"s2\">&quot;app_label.MyModel&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Peringatan</p>\n<p>Meskipun anda dapat mengakses kelas-kelas model seperti yang digambarkan dibawah, hindari berinteraksi dengan basisdata dalam penerapan <a class=\"reference internal\" href=\"#django.apps.AppConfig.ready\" title=\"django.apps.AppConfig.ready\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">ready()</span></code></a> anda. Ini termasuk cara model yang mengerjakan permintaan (<a class=\"reference internal\" href=\"/id/5.2/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a>, <a class=\"reference internal\" href=\"/id/5.2/ref/models/instances/#django.db.models.Model.delete\" title=\"django.db.models.Model.delete\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">delete()</span></code></a>, manager methods etc.), dan juga permintaan SQL mentah melalui cara <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.connection</span></code>. Your <a class=\"reference internal\" href=\"#django.apps.AppConfig.ready\" title=\"django.apps.AppConfig.ready\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">ready()</span></code></a> akan jalan selama permulaan dari stiap perintah pengelolaan. Sebagai contoh, meskipun konfigurasi basis data percobaan terpisah dari pengaturan produksi, <code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span> <span class=\"pre\">test</span></code> masih dapat mengerjakan beberapa permintaan terhadap basisdata <strong>produksi</strong> anda!</p>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Catatan</p>\n<p>Di proses inisialisasi biasanya, metode <code class=\"docutils literal notranslate\"><span class=\"pre\">ready</span></code> hanya dipanggil sekali oleh Django. Tetapi dalam kasus tertentu, khususnya dalam percobaan yang remeh dengan aplikasi terpasang, <code class=\"docutils literal notranslate\"><span class=\"pre\">ready</span></code> mungkin dipanggil lebih dari satu. Dalam kasus tersebut, baik menulis metode idempoten, atau menaruh bendera pada kelas <code class=\"docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code> anda untuk mencegah menjalankan kembali kode yang harus dijalankan setidaknya satu kali.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"namespace-packages-as-apps\">\n<span id=\"namespace-package\"></span><h3>Paket namespace sebagai aplikasi<a class=\"heading-anchor\" href=\"#namespace-packages-as-apps\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Paket-paket Python tanpa berkas <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__.py</span></code> dikenal sebagai &quot;namespace packages&quot; dan mungkin tersebar di banyak direktori pada tempat berbeda di <code class=\"docutils literal notranslate\"><span class=\"pre\">sys.path</span></code> (see <span class=\"target\" id=\"index-2\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0420/\"><strong>PEP 420</strong></a>).</p>\n<p>Aplikasi Django membutuhkan sebuah jalus sistem berkas berbasis tunggal dimana Django (tergantung pada konfigurasi) akan mencari cetakan, aset tetap, dll. Hingga, paket namespace mungkin hanya aplikasi Django jika satu dari hal berikut adalah benar:</p>\n<ol class=\"arabic simple\">\n<li><p>Paket namespace sebenarnya mempunyai hanya tempat tunggal (yaitu tidak tersebar terhadap lebih dari satu direktori.)</p></li>\n<li><p>Kelas <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> digunakan untuk mengkonfigurasikan aplikasi yang mempunyai atribut kelas <a class=\"reference internal\" href=\"#django.apps.AppConfig.path\" title=\"django.apps.AppConfig.path\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">path</span></code></a>, yang merupakan jalur direktori mutlak Django akan digunakan sebagai jalur dasar tunggal untuk aplikasi.</p></li>\n</ol>\n<p>Jika tidak satupun dari kondisi ini bertemu, Django akan memunculkan <a class=\"reference internal\" href=\"/id/5.2/ref/exceptions/#django.core.exceptions.ImproperlyConfigured\" title=\"django.core.exceptions.ImproperlyConfigured\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">ImproperlyConfigured</span></code></a>.</p>\n</section>\n</section>\n<section id=\"application-registry\">\n<h2>Registrar aplikasi<a class=\"heading-anchor\" href=\"#application-registry\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.apps.apps\">\n<span class=\"sig-name descname\"><span class=\"pre\">apps</span></span><a class=\"heading-anchor\" href=\"#django.apps.apps\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Registrar aplikasi menyediakan API umum berikut. Cara yang tidak ada di daftar dibawah ini  dianggap pribadi dan mungkin berubah tanpa pemberitahuan.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.apps.ready\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">apps.</span></span><span class=\"sig-name descname\"><span class=\"pre\">ready</span></span><a class=\"heading-anchor\" href=\"#django.apps.apps.ready\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Atribut Boolean yang disetel ke <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> setelah registrar sepenuhnya dikumpulkan dan semua cara <a class=\"reference internal\" href=\"#django.apps.AppConfig.ready\" title=\"django.apps.AppConfig.ready\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">AppConfig.ready()</span></code></a> dipanggil.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.apps.apps.get_app_configs\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">apps.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_app_configs</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.apps.apps.get_app_configs\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Mengembalikan instance berulang dari  <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.apps.apps.get_app_config\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">apps.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_app_config</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">app_label</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.apps.apps.get_app_config\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Mengembalikan sebuah <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> untuk aplikasi dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">app_label</span></code>. yang diberikan. Memunculkan <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#LookupError\" title=\"(di Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">LookupError</span></code></a> jika tidak ada aplikasi.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.apps.apps.is_installed\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">apps.</span></span><span class=\"sig-name descname\"><span class=\"pre\">is_installed</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">app_name</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.apps.apps.is_installed\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Memeriksa apakah aplikasi dengan nama diberikan anda di registrar. <code class=\"docutils literal notranslate\"><span class=\"pre\">app_name</span></code> adalah nama penuh dari aplikasi, misalnya <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.admin'</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.apps.apps.get_model\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">apps.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_model</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">app_label</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">require_ready</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.apps.apps.get_model\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Mengembalikan <a class=\"reference internal\" href=\"/id/5.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\">Model</span></code></a> dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">app_label</span></code> yang diberikan dan <code class=\"docutils literal notranslate\"><span class=\"pre\">model_name</span></code>. Sebagai sebuah jalan pintas, metode ini juga menerima argumen tunggal dalam bentuk <code class=\"docutils literal notranslate\"><span class=\"pre\">app_label.model_name</span></code>. <code class=\"docutils literal notranslate\"><span class=\"pre\">model_name</span></code> kasus-tidak peka.</p>\n<p>Memunculkan <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#LookupError\" title=\"(di Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">LookupError</span></code></a> jika tidak seperti aplikasi atau model ada. Memunculkan <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#ValueError\" title=\"(di Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">ValueError</span></code></a> ketika dipanggil dengan argumen tunggal yang tidak mengandung satu titik.</p>\n<p>Membutuhkan aplikasi regristrar untuk sepenuhnya dikumpulkan meskipun argumen <code class=\"docutils literal notranslate\"><span class=\"pre\">require_ready</span></code> disetel menjadi <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.</p>\n<p>Mengatur <code class=\"docutils literal notranslate\"><span class=\"pre\">require_ready</span></code> menjadi <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> mengizinkan pencarian model <a class=\"reference internal\" href=\"#app-loading-process\"><span class=\"std std-ref\">while the app registry is being populated</span></a>, khususnya selama tahap kedua dimana itu mengimpor model. Kemudian <code class=\"docutils literal notranslate\"><span class=\"pre\">get_model()</span></code> mempunyai pengaruh sama ketika mengimpor model. Kasus penggunaan utama adalah mengkonfigurasi kelas-kelas model dengan pengaturan, seperti <a class=\"reference internal\" href=\"/id/5.2/ref/settings/#std-setting-AUTH_USER_MODEL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">AUTH_USER_MODEL</span></code></a>.</p>\n<p>Ketika <code class=\"docutils literal notranslate\"><span class=\"pre\">require_ready</span></code> adalah <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">get_model()</span></code> mengembalikan sebuah kelas model yang mungkin tidak sepenuhnya berfungsi (accessor balikan mungkin hilang, sebagai contoh) sampai aplikasi regristrar sepenuhnya dikumpulkan. Untuk alasan ini, itu adalah terbaik untuk membiarkan <code class=\"docutils literal notranslate\"><span class=\"pre\">require_ready</span></code> ke nilai awalan dari <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> kapanpun memungkinkan.</p>\n</dd></dl>\n\n</section>\n<section id=\"initialization-process\">\n<span id=\"app-loading-process\"></span><h2>Inisialisasi pengolahan<a class=\"heading-anchor\" href=\"#initialization-process\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"how-applications-are-loaded\">\n<h3>Bagaimana aplikasi dimuat<a class=\"heading-anchor\" href=\"#how-applications-are-loaded\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ketika Django mulai, <a class=\"reference internal\" href=\"#django.setup\" title=\"django.setup\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.setup()</span></code></a> bertanggung jawab untuk mengumpulkan registrar aplikasi.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.setup\">\n<span class=\"sig-name descname\"><span class=\"pre\">setup</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">set_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.setup\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Konfigurasi Django oleh:</p>\n<ul class=\"simple\">\n<li><p>Memuat pengaturan.</p></li>\n<li><p>Mengatur pencatatan.</p></li>\n<li><p>Jika <code class=\"docutils literal notranslate\"><span class=\"pre\">set_prefix</span></code> adalah True, pengaturan awalan tulisan penyelesai URL ke <a class=\"reference internal\" href=\"/id/5.2/ref/settings/#std-setting-FORCE_SCRIPT_NAME\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FORCE_SCRIPT_NAME</span></code></a> jika ditentukan, atau jika tidak <code class=\"docutils literal notranslate\"><span class=\"pre\">/</span></code>.</p></li>\n<li><p>Memulai registrar aplikasi</p></li>\n</ul>\n<p>Fungsi ini dipanggil otomatis:</p>\n<ul class=\"simple\">\n<li><p>Ketika menjalankan peladen HTTP melalui dukungan ASGI atau WSGI Django.</p></li>\n<li><p>Ketika meminta perintah pengelolaan.</p></li>\n</ul>\n<p>Dia harus dipanggil secara tersirat di kasus lain, sebagai contoh di tulisan Phyton.</p>\n</dd></dl>\n\n<p>Registrar aplikasi dimulai dalam tiga tingkatan, Pada setiap tingkatan, Django mengolah semua aplikasi berdasarkan dari  <a class=\"reference internal\" href=\"/id/5.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<ol class=\"arabic\">\n<li><p>Django pertama mengimpor setiap barang di <a class=\"reference internal\" href=\"/id/5.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<p>Jika ini adalah kelas konfigurasi aplikasi, Django impor paket akar dari aplikasi, ditentukan dengan atribut <a class=\"reference internal\" href=\"#django.apps.AppConfig.name\" title=\"django.apps.AppConfig.name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">name</span></code></a> nya. Jika itu adalah paket Python, Django mencari untuk konfigurasi aplikasi dalam sebuah submodul <code class=\"docutils literal notranslate\"><span class=\"pre\">apps.py</span></code>, atau lainnya membuat konfigurasi aplikasi awalan.</p>\n<p><em>Pada tingkatan ini, kode anda jangan mengimpor model apapun!</em></p>\n<p>Dengan kata lain, paket akar aplikasi anda dan modul yang menentukan kelas-kelas konfigurasi aplikasi anda jangan impor model apapun, bahkan secara tidak langsung.</p>\n<p>Sesungguhnya, Django mengizinkan mengimpor model sekali konfigurasi aplikasi mereka dimuat. Bagaimanapun, agar menghindari kendala yang tidak perlu pada urutan <a class=\"reference internal\" href=\"/id/5.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>, sangat dianjurkan tidak mengimpor model apapun pada tingkatan ini.</p>\n<p>Sekali tingkatan ini lengkap, API yang menjalankan konfigurasi aplikasi seperti <a class=\"reference internal\" href=\"#django.apps.apps.get_app_config\" title=\"django.apps.apps.get_app_config\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_app_config()</span></code></a> menjadi tidak berguna.</p>\n</li>\n<li><p>Kemudian Django berusaha mengimpor submodul <code class=\"docutils literal notranslate\"><span class=\"pre\">model</span></code> dari setiap aplikasi, jika memang ada.</p>\n<p>Anda harus menentukan atau mengimpor semua model di aplikasi <code class=\"docutils literal notranslate\"><span class=\"pre\">models.py</span></code> anda atau <code class=\"docutils literal notranslate\"><span class=\"pre\">models/__init__.py</span></code>. Sebaliknya, registri aplikasi mungkin tidak dikumpulkan penuh pada titik ini, yang dapat menyebabkan ORM tidak berfungsi.</p>\n<p>Ketika tingkatan ini lengkap, API yang bekerja di model seperti <a class=\"reference internal\" href=\"#django.apps.apps.get_model\" title=\"django.apps.apps.get_model\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_model()</span></code></a> menjadi dapat digunakan.</p>\n</li>\n<li><p>Akhirnya Django menjalankan cara <a class=\"reference internal\" href=\"#django.apps.AppConfig.ready\" title=\"django.apps.AppConfig.ready\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">ready()</span></code></a> dari setiap konfigurasi aplikasi.</p></li>\n</ol>\n</section>\n<section id=\"troubleshooting\">\n<span id=\"applications-troubleshooting\"></span><h3>Menyelesaikan masalah<a class=\"heading-anchor\" href=\"#troubleshooting\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Disini beberapa masalah umum yang mungkin muncul selama inisialisasi:</p>\n<ul>\n<li><p><a class=\"reference internal\" href=\"/id/5.2/ref/exceptions/#django.core.exceptions.AppRegistryNotReady\" title=\"django.core.exceptions.AppRegistryNotReady\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppRegistryNotReady</span></code></a>: Ini terjadi ketika mengimpor sebuah konfigurasi aplikasi atau sebuah kode pemicu modul model yang bergantung di registri aplikasi.</p>\n<p>Sebagai contoh, <a class=\"reference internal\" href=\"/id/5.2/ref/utils/#django.utils.translation.gettext\" title=\"django.utils.translation.gettext\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">gettext()</span></code></a> menggunakan registrar aplikasi untuk mencari katalog terjemahan di aplikasi. Untuk menterjemahkan pada waktu impor, anda butuh <a class=\"reference internal\" href=\"/id/5.2/ref/utils/#django.utils.translation.gettext_lazy\" title=\"django.utils.translation.gettext_lazy\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">gettext_lazy()</span></code></a> sebagai gantinya. (Menggunakan <a class=\"reference internal\" href=\"/id/5.2/ref/utils/#django.utils.translation.gettext\" title=\"django.utils.translation.gettext\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">gettext()</span></code></a> akan berupa sebuah kesalahan, karena terjemahan akan terjadi pada waktu impor, daripada setiap permintaan tergantung pada bahasa aktif.)</p>\n<p>Menjalankan permintaan basisdata dengan ORM pada waktu impor dalam modul model juga akan memicu pengecualian ini. ORM tidak dapat berfungsi dengan benar sampai semua model tersedia.</p>\n<p>Pengecualian ini juga terjadi jika anda lupa memanggil <a class=\"reference internal\" href=\"#django.setup\" title=\"django.setup\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.setup()</span></code></a> di tulisan berdiri sendiri.</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">ImportError:</span> <span class=\"pre\">tidak</span> <span class=\"pre\">dapat</span> <span class=\"pre\">impor</span> <span class=\"pre\">nama</span> <span class=\"pre\">...</span></code> Ini terjadi jika urutan impor berakhir dalam perulangan.</p>\n<p>Untuk mengurangi permasalahan tersebut, anda harus mengecilkan ketergantungan diantara model anda dan melakukan sedikit pekerjaan sebisa mungkin pada waktu impor. Untuk menghindari penjalanan kode pada waktu impor, anda dapat memindahkannya dan menembolok hasilnya. Kode akan dikerjakan ketika anda pertama butuh hasilnya. Konsep ini dikenal sebagai &quot;lazy evaluation&quot;.</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.admin</span></code> automatically performs autodiscovery of <code class=\"docutils literal notranslate\"><span class=\"pre\">admin</span></code>\nmodules in installed applications. To prevent it, change your\n<a class=\"reference internal\" href=\"/id/5.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> to contain\n<code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.admin.apps.SimpleAdminConfig'</span></code> instead of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.admin'</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">RuntimeWarning:</span> <span class=\"pre\">Accessing</span> <span class=\"pre\">the</span> <span class=\"pre\">database</span> <span class=\"pre\">during</span> <span class=\"pre\">app</span> <span class=\"pre\">initialization</span> <span class=\"pre\">is</span>\n<span class=\"pre\">discouraged.</span></code> This warning is triggered for database queries executed before\napps are ready, such as during module imports or in the\n<a class=\"reference internal\" href=\"#django.apps.AppConfig.ready\" title=\"django.apps.AppConfig.ready\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">AppConfig.ready()</span></code></a> method. Such premature database queries are\ndiscouraged because they will run during the startup of every management\ncommand, which will slow down your project startup, potentially cache stale\ndata, and can even fail if migrations are pending.</p>\n<p>For example, a common mistake is making a database query to populate form\nfield choices:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">LocationForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">country</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">ChoiceField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"k\">for</span> <span class=\"n\">c</span> <span class=\"ow\">in</span> <span class=\"n\">Country</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()])</span>\n</code></pre></div>\n<p>In the example above, the query from <code class=\"docutils literal notranslate\"><span class=\"pre\">Country.objects.all()</span></code> is executed\nduring module import, because the <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> is iterated over. To avoid the\nwarning, the form could use a <a class=\"reference internal\" href=\"/id/5.2/ref/forms/fields/#django.forms.ModelChoiceField\" title=\"django.forms.ModelChoiceField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelChoiceField</span></code></a>\ninstead:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">LocationForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">country</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">ModelChoiceField</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">Country</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span>\n</code></pre></div>\n<p>To make it easier to find the code that triggered this warning, you can make\nPython <a class=\"reference external\" href=\"https://docs.python.org/3/library/warnings.html#warning-filter\" title=\"(di Python v3.14)\"><span class=\"xref std std-ref\">treat warnings as errors</span></a> to reveal the\nstack trace, for example with <code class=\"docutils literal notranslate\"><span class=\"pre\">python</span> <span class=\"pre\">-Werror</span> <span class=\"pre\">manage.py</span> <span class=\"pre\">shell</span></code>.</p>\n</li>\n</ul>\n</section>\n</section>","rootId":"module-django.apps","toc":[{"title":"Proyek dan aplikasi","anchor":"projects-and-applications","children":[]},{"title":"Konfigurasi aplikasi","anchor":"configuring-applications","children":[{"title":"Untuk pengarang aplikasi","anchor":"for-application-authors","children":[]},{"title":"Untuk pengguna aplikasi","anchor":"for-application-users","children":[]}]},{"title":"Konfigurasi aplikasi","anchor":"application-configuration","children":[{"title":"Atribut dapat dikonfigurasi","anchor":"configurable-attributes","children":[]},{"title":"Atribut hanya-baca","anchor":"read-only-attributes","children":[]},{"title":"Cara","anchor":"methods","children":[]},{"title":"Paket namespace sebagai aplikasi","anchor":"namespace-packages-as-apps","children":[]}]},{"title":"Registrar aplikasi","anchor":"application-registry","children":[]},{"title":"Inisialisasi pengolahan","anchor":"initialization-process","children":[{"title":"Bagaimana aplikasi dimuat","anchor":"how-applications-are-loaded","children":[]},{"title":"Menyelesaikan masalah","anchor":"troubleshooting","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"Acuan API","url":"/id/5.2/ref/"}],"prev":{"docname":"ref/index","title":"Acuan API","url":"/id/5.2/ref/"},"next":{"docname":"ref/checks","title":"Kerangka pemeriksaan sistem","url":"/id/5.2/ref/checks/"},"formats":{"html":"/id/5.2/ref/applications/","markdown":"/id/5.2/ref/applications.md","json":"/id/5.2/ref/applications.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/ref/applications.txt","official":"https://docs.djangoproject.com/id/5.2/ref/applications/","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"]}