{"title":"Pengelola","version":"5.0","locale":"id","docname":"topics/db/managers","url":"/id/5.0/topics/db/managers/","canonical":"https://djangodocs.dev/id/5.0/topics/db/managers/","summary":"class Manager Link to this definition # Sebuah manager adalah antarmuka melalui mana tindakan permintaan basisdata disediakan pada model Django. Setidaknya satu…","html":"<h1>Pengelola<a class=\"heading-anchor\" href=\"#managers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Manager\">\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\">Manager</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Manager\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Sebuah <code class=\"docutils literal notranslate\"><span class=\"pre\">manager</span></code> adalah antarmuka melalui mana tindakan permintaan basisdata disediakan pada model Django. Setidaknya satu <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> ada untuk setiap model dalam sebuah apliaksi Django.</p>\n<p>Cara kelas-kelas <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> bekerja didokumentasikan dalam <a class=\"reference internal\" href=\"/id/5.0/topics/db/queries/\"><span class=\"doc\">Membuat query</span></a>; dokumen ini secara khusus menyentuh pada pilihan model yang menyesuaikan perilaku <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code>.</p>\n<section id=\"manager-names\">\n<span id=\"id1\"></span><h2>Nama pengelola<a class=\"heading-anchor\" href=\"#manager-names\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Secara awalan, Django menambah sebuah <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> dengan nama <code class=\"docutils literal notranslate\"><span class=\"pre\">objects</span></code> pada setiap kelas model Django. Bagaimanapun, jika anda ingin menggunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">objects</span></code> sebagai sebuah nama bidang, atau jika anda ingin menggunakan sebuah nama selain dari <code class=\"docutils literal notranslate\"><span class=\"pre\">objects</span></code> untuk <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code>, anda dapat menamai kembali itu pada berdasarkan per-model. Untuk menamai kembali <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> untuk kelas diberikan, tentukan sebuah atribut kelas dari jenis <code class=\"docutils literal notranslate\"><span class=\"pre\">models.Manager()</span></code> pada model itu. Sebagai 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.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"n\">people</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Manager</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Menggunakan model contoh ini, <code class=\"docutils literal notranslate\"><span class=\"pre\">Person.objects</span></code> akanmembangkitkan sebuah pengecualian <code class=\"docutils literal notranslate\"><span class=\"pre\">AttributeError</span></code>, tetapi <code class=\"docutils literal notranslate\"><span class=\"pre\">Person.people.all()</span></code> akan menyediakan daftar dari semua obyek <code class=\"docutils literal notranslate\"><span class=\"pre\">Person</span></code>.</p>\n</section>\n<section id=\"custom-managers\">\n<span id=\"id2\"></span><h2>Pengelolaan penyesuaian<a class=\"heading-anchor\" href=\"#custom-managers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Anda dapat menggunakan sebuah penyesuaian <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> dalam model tertentu dengan memperpanjang kelas <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> dasar dan menginstansiasi penyesuaian <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> anda dalam model anda.</p>\n<p>Ada dua alasan anda mungkin ingin menyesuaikan sebuah <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code>: untuk menambah metode <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> tambahan, dan/atau merubah <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> awal kembalian <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code>.</p>\n<section id=\"adding-extra-manager-methods\">\n<h3>Menambahkan metode pengelolaan tambahan<a class=\"heading-anchor\" href=\"#adding-extra-manager-methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Menambahkan metode <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> tambahan adalah cara disukai untuk menambah fungsionalitas &quot;table-level&quot; pada model anda. (Untuk fungsionalitas &quot;row-level&quot; -- yaitu yang bertindak pada sebuah instance tunggal dari sebuah obyek model -- gunakan <a class=\"reference internal\" href=\"/id/5.0/topics/db/models/#model-methods\"><span class=\"std std-ref\">Model methods</span></a>, bukan penyesuaian metode <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code>.)</p>\n<p>Sebagai contoh,``Manager`` penyesuaian ini menambahkan sebuah metode <code class=\"docutils literal notranslate\"><span class=\"pre\">with_counts()</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models.functions</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Coalesce</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PollManager</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Manager</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">with_counts</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">num_responses</span><span class=\"o\">=</span><span class=\"n\">Coalesce</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;response&quot;</span><span class=\"p\">),</span> <span class=\"mi\">0</span><span class=\"p\">))</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">OpinionPoll</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">question</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">PollManager</span><span class=\"p\">()</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Response</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">poll</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">OpinionPoll</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"c1\"># ...</span>\n</code></pre></div>\n<p>With this example, you'd use <code class=\"docutils literal notranslate\"><span class=\"pre\">OpinionPoll.objects.with_counts()</span></code> to get a\n<code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> of <code class=\"docutils literal notranslate\"><span class=\"pre\">OpinionPoll</span></code> objects with the extra <code class=\"docutils literal notranslate\"><span class=\"pre\">num_responses</span></code>\nattribute attached.</p>\n<p>Sebuah metode <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> penyesuaian dapat mengembalikan apapun anda inginkan. Itu tidak harus mengembalikan sebuah <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>.</p>\n<p>Another thing to note is that <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> methods can access <code class=\"docutils literal notranslate\"><span class=\"pre\">self.model</span></code> to\nget the model class to which they're attached.</p>\n</section>\n<section id=\"modifying-a-manager-s-initial-queryset\">\n<h3>Merubah <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> awal pengelolaan<a class=\"heading-anchor\" href=\"#modifying-a-manager-s-initial-queryset\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Dasar <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> mengembalikan semua obyek-obyek di sistem. Sebagai contoh, menggunakan model ini:</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.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Book</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>...pernyataan <code class=\"docutils literal notranslate\"><span class=\"pre\">Book.objects.all()</span></code> akan mengembalikan semua buku-buku di basisdata.</p>\n<p>Anda dapat menimpa <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> dasar <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> dengan menimpa metode <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager.get_queryset()</span></code>. <code class=\"docutils literal notranslate\"><span class=\"pre\">get_queryset()</span></code> harus mengembalikan sebuah <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> dengan sifat-sifat anda butuhkan.</p>\n<p>Sebagai contoh, model berikut mempunyai <em>dua</em> <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> -- satu yang mengembalikan semua obyek, dan satu yang mengembalikan hanya buku-buku oleh Roald Dahl:</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\"># First, define the Manager subclass.</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">DahlBookManager</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Manager</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_queryset</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"s2\">&quot;Roald Dahl&quot;</span><span class=\"p\">)</span>\n\n\n<span class=\"c1\"># Then hook it into the Book model explicitly.</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Book</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Manager</span><span class=\"p\">()</span>  <span class=\"c1\"># The default manager.</span>\n    <span class=\"n\">dahl_objects</span> <span class=\"o\">=</span> <span class=\"n\">DahlBookManager</span><span class=\"p\">()</span>  <span class=\"c1\"># The Dahl-specific manager.</span>\n</code></pre></div>\n<p>Dengan model contoh ini, <code class=\"docutils literal notranslate\"><span class=\"pre\">Book.objects.all()</span></code> akan mengembalikan semua buku-buku di basisdata, tetapi <code class=\"docutils literal notranslate\"><span class=\"pre\">Book.dahl_objects.all()</span></code> akan hanya mengembalikan satu yang ditulis oleh Roald Dahl.</p>\n<p>Because <code class=\"docutils literal notranslate\"><span class=\"pre\">get_queryset()</span></code> returns a <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> object, you can use\n<code class=\"docutils literal notranslate\"><span class=\"pre\">filter()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">exclude()</span></code> and all the other <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> methods on it. So\nthese statements are all legal:</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\">Book</span><span class=\"o\">.</span><span class=\"n\">dahl_objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">dahl_objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s2\">&quot;Matilda&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">dahl_objects</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>This example also pointed out another interesting technique: using multiple\nmanagers on the same model. You can attach as many <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager()</span></code> instances to\na model as you'd like. This is a non-repetitive way to define common &quot;filters&quot;\nfor your models.</p>\n<p>Sebagai 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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorManager</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Manager</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_queryset</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">role</span><span class=\"o\">=</span><span class=\"s2\">&quot;A&quot;</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">EditorManager</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Manager</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_queryset</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">role</span><span class=\"o\">=</span><span class=\"s2\">&quot;E&quot;</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    <span class=\"n\">role</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;A&quot;</span><span class=\"p\">:</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;Author&quot;</span><span class=\"p\">),</span> <span class=\"s2\">&quot;E&quot;</span><span class=\"p\">:</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;Editor&quot;</span><span class=\"p\">)})</span>\n    <span class=\"n\">people</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Manager</span><span class=\"p\">()</span>\n    <span class=\"n\">authors</span> <span class=\"o\">=</span> <span class=\"n\">AuthorManager</span><span class=\"p\">()</span>\n    <span class=\"n\">editors</span> <span class=\"o\">=</span> <span class=\"n\">EditorManager</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Contoh ini mengizinkan anda meminta Person.authors.all()`, <code class=\"docutils literal notranslate\"><span class=\"pre\">Person.editors.all()</span></code>, dan <code class=\"docutils literal notranslate\"><span class=\"pre\">Person.people.all()</span></code>, menghasilkan hasil dapat diramalkan.</p>\n</section>\n<section id=\"default-managers\">\n<span id=\"id3\"></span><h3>Pengelola awal<a class=\"heading-anchor\" href=\"#default-managers\"><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.db.models.Model._default_manager\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">_default_manager</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Model._default_manager\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Jika anda menggunakan obyek <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> penyesuaian, ambil catatan bahwa <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> Django pertama hadapi (dalam urutan dimana mereka ditentukan dalam model) mempunyai sebuah keadaan khusus. Django menafsirkan <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> pertama ditentukan dalam sebuah kelas sebagai <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> &quot;default&quot;, dan beberapa bagian dari Django (termasuk <a class=\"reference internal\" href=\"/id/5.0/ref/django-admin/#django-admin-dumpdata\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">dumpdata</span></code></a>) akan menggunakan yang <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> khusus untuk model itu. Sebagai sebuah hasil, itu adalah ide bagus untuk hati-hati dalam pilihan anda dari pengelola awalan untuk menghindari keadan dimana menimpa hasil <code class=\"docutils literal notranslate\"><span class=\"pre\">get_queryset()</span></code> dalam sebuah ketidakmampuan mengambil obyek-obyek anda sukai bekerja dengannya.</p>\n<p>Anda dapat menentukan sebuah penyesuaian pengelolaan awalan menggunakan <a class=\"reference internal\" href=\"/id/5.0/ref/models/options/#django.db.models.Options.default_manager_name\" title=\"django.db.models.Options.default_manager_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Meta.default_manager_name</span></code></a>.</p>\n<p>Jika anda sedang menulis beberapa kode yang harus menangani sebuah model tidak dikenal, sebagai contoh, dalam sebuah aplikasi pihak-ketiga yang menerapkan sebuah tampilan umum, gunakan pengelola ini (atau <a class=\"reference internal\" href=\"#django.db.models.Model._base_manager\" title=\"django.db.models.Model._base_manager\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">_base_manager</span></code></a>) daripada beranggapan model mempunyai sebuah pengelola <code class=\"docutils literal notranslate\"><span class=\"pre\">objects</span></code>.</p>\n</section>\n<section id=\"base-managers\">\n<h3>Pengelolaan dasar<a class=\"heading-anchor\" href=\"#base-managers\"><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.db.models.Model._base_manager\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">_base_manager</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Model._base_manager\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<section id=\"using-managers-for-related-object-access\">\n<span id=\"managers-for-related-objects\"></span><h4>Menggunakan pengelola untuk akses obyek terkait<a class=\"heading-anchor\" href=\"#using-managers-for-related-object-access\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Secara awalan, Django menggunakan sebuah instance dari kelas pengelola <code class=\"docutils literal notranslate\"><span class=\"pre\">Model._base_manager</span></code> ketika mengakses obyek terkait (yaitu <code class=\"docutils literal notranslate\"><span class=\"pre\">choice.question</span></code>), bukan <code class=\"docutils literal notranslate\"><span class=\"pre\">_default_manager</span></code> pada obyek terkait. Ini karena Django butuh dapat mengambil obyek terkait, bahkan jika itu akan sebaliknya disaring (dan karenanya tidak dapat diakses) oleh pengelola awalan.</p>\n<p>Jika kelas pengelola dasar biasa (<a class=\"reference internal\" href=\"#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.db.models.Manager</span></code></a>) tidak sesuai untuk keadaan anda, anda dapat memberitahu Django kelas mana digunakan oleh pengaturan <a class=\"reference internal\" href=\"/id/5.0/ref/models/options/#django.db.models.Options.base_manager_name\" title=\"django.db.models.Options.base_manager_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Meta.base_manager_name</span></code></a>.</p>\n<p>Base managers aren't used when querying on related models, or when\n<a class=\"reference internal\" href=\"/id/5.0/topics/db/queries/#backwards-related-objects\"><span class=\"std std-ref\">accessing a one-to-many or many-to-many relationship</span></a>. For example, if the <code class=\"docutils literal notranslate\"><span class=\"pre\">Question</span></code> model\n<a class=\"reference internal\" href=\"/id/5.0/intro/tutorial02/#creating-models\"><span class=\"std std-ref\">from the tutorial</span></a> had a <code class=\"docutils literal notranslate\"><span class=\"pre\">deleted</span></code> field and a base\nmanager that filters out instances with <code class=\"docutils literal notranslate\"><span class=\"pre\">deleted=True</span></code>, a queryset like\n<code class=\"docutils literal notranslate\"><span class=\"pre\">Choice.objects.filter(question__name__startswith='What')</span></code> would include\nchoices related to deleted questions.</p>\n</section>\n<section id=\"don-t-filter-away-any-results-in-this-type-of-manager-subclass\">\n<h4>Jangan menyaring hasil apapun dalam jenis ini dari pengelola subkelas<a class=\"heading-anchor\" href=\"#don-t-filter-away-any-results-in-this-type-of-manager-subclass\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Pengelola ini digunakan untuk mengakses obyek yang terkait pada dari beberapa model lain. Dalam keadaan tersebut, Django harus dapat melihat semua obyek untuk model itu sedang diambil, sehingga <em>apapun</em> yang mengacu dapat diambil.</p>\n<p>Therefore, you should not override <code class=\"docutils literal notranslate\"><span class=\"pre\">get_queryset()</span></code> to filter out any rows.\nIf you do so, Django will return incomplete results.</p>\n</section>\n</section>\n<section id=\"calling-custom-queryset-methods-from-the-manager\">\n<span id=\"calling-custom-queryset-methods-from-manager\"></span><h3>Memanggil metode <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> penyesuaian dari pengelola<a class=\"heading-anchor\" href=\"#calling-custom-queryset-methods-from-the-manager\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Selagi kebanyakan metode dari <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> standar dapat diakses langsung dari <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code>, ini hanya kasus untuk metode tambahan ditentukan pada sebuah penyesuaian <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> jika anda juga menerapkan mereka pada <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PersonQuerySet</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">QuerySet</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">authors</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">role</span><span class=\"o\">=</span><span class=\"s2\">&quot;A&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">editors</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">role</span><span class=\"o\">=</span><span class=\"s2\">&quot;E&quot;</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PersonManager</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Manager</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">PersonQuerySet</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">using</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_db</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">authors</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_queryset</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">editors</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_queryset</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">editors</span><span class=\"p\">()</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    <span class=\"n\">role</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;A&quot;</span><span class=\"p\">:</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;Author&quot;</span><span class=\"p\">),</span> <span class=\"s2\">&quot;E&quot;</span><span class=\"p\">:</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;Editor&quot;</span><span class=\"p\">)})</span>\n    <span class=\"n\">people</span> <span class=\"o\">=</span> <span class=\"n\">PersonManager</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Contoh ini mengizinkan anda memanggil kedua <code class=\"docutils literal notranslate\"><span class=\"pre\">authors()</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">editors()</span></code> secara langsung dari pengelola <code class=\"docutils literal notranslate\"><span class=\"pre\">Person.people</span></code>.</p>\n</section>\n<section id=\"creating-a-manager-with-queryset-methods\">\n<span id=\"create-manager-with-queryset-methods\"></span><h3>Membuat pengelola dengan cara <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code><a class=\"heading-anchor\" href=\"#creating-a-manager-with-queryset-methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Sebagai pengganti dari pendekatan diatas yang membutuhkan metode penggandaan pada kedua <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code>, <a class=\"reference internal\" href=\"/id/5.0/ref/models/querysets/#django.db.models.query.QuerySet.as_manager\" title=\"django.db.models.query.QuerySet.as_manager\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">QuerySet.as_manager()</span></code></a> dapat digunakan untuk membuat sebuah instance dari <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> dengan salinan dari sebuah metode <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> penyesuaian:</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\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n    <span class=\"n\">people</span> <span class=\"o\">=</span> <span class=\"n\">PersonQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Instance <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> dibuat oleh <a class=\"reference internal\" href=\"/id/5.0/ref/models/querysets/#django.db.models.query.QuerySet.as_manager\" title=\"django.db.models.query.QuerySet.as_manager\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">QuerySet.as_manager()</span></code></a> akan secara virtual mirip pada <code class=\"docutils literal notranslate\"><span class=\"pre\">PersonManager</span></code> dari contoh sebelumnya.</p>\n<p>Tidak setiap metode <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> masuk akal pada tingkat <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code>; sebagai contoh kami sengaja mencegah metode <a class=\"reference internal\" href=\"/id/5.0/ref/models/querysets/#django.db.models.query.QuerySet.delete\" title=\"django.db.models.query.QuerySet.delete\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">QuerySet.delete()</span></code></a> dari menjadi disalin ke atas kelas <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code>.</p>\n<p>Cara disalin berdasarkan aturan berikut:</p>\n<ul class=\"simple\">\n<li><p>Cara umum disalin secara awal.</p></li>\n<li><p>Metode pribadi (mulai dengan sebuah garis bawah) tidak disalin secara awalan.</p></li>\n<li><p>Metode dengan atribut <code class=\"docutils literal notranslate\"><span class=\"pre\">queryset_only</span></code> disetel menjadi <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> adalah selalu disalin.</p></li>\n<li><p>Metode dengan atribut <code class=\"docutils literal notranslate\"><span class=\"pre\">queryset_only</span></code> disetel menjadi <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> adalah tidak pernah disalin.</p></li>\n</ul>\n<p>Sebagai 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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CustomQuerySet</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">QuerySet</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Available on both Manager and QuerySet.</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">public_method</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span>\n\n    <span class=\"c1\"># Available only on QuerySet.</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">_private_method</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span>\n\n    <span class=\"c1\"># Available only on QuerySet.</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">opted_out_public_method</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span>\n\n    <span class=\"n\">opted_out_public_method</span><span class=\"o\">.</span><span class=\"n\">queryset_only</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n    <span class=\"c1\"># Available on both Manager and QuerySet.</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">_opted_in_private_method</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span>\n\n    <span class=\"n\">_opted_in_private_method</span><span class=\"o\">.</span><span class=\"n\">queryset_only</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n</code></pre></div>\n<section id=\"from-queryset\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">from_queryset()</span></code><a class=\"heading-anchor\" href=\"#from-queryset\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.from_queryset\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">classmethod</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">from_queryset</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">queryset_class</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.from_queryset\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Untuk penggunaan lanjutan anda mungkin ingin kedua penyesuaian <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> dan penyesuaian <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>. Anda dapat melakukan itu dengan memanggil <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager.from_queryset()</span></code> yang mengembalikan sebuah <em>subkelas</em> dari dasar <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> anda dengan salinan dari metode <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> penyesuaian:</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\">CustomManager</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Manager</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">manager_only_method</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CustomQuerySet</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">QuerySet</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">manager_and_queryset_method</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">CustomManager</span><span class=\"o\">.</span><span class=\"n\">from_queryset</span><span class=\"p\">(</span><span class=\"n\">CustomQuerySet</span><span class=\"p\">)()</span>\n</code></pre></div>\n<p>Anda mungkin juga menyimpan kelas dibangkitkan kedalam sebuah variabel:</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\">MyManager</span> <span class=\"o\">=</span> <span class=\"n\">CustomManager</span><span class=\"o\">.</span><span class=\"n\">from_queryset</span><span class=\"p\">(</span><span class=\"n\">CustomQuerySet</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">MyManager</span><span class=\"p\">()</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"custom-managers-and-model-inheritance\">\n<span id=\"custom-managers-and-inheritance\"></span><h3>Pengelolaan penyesuaian dan warisan model<a class=\"heading-anchor\" href=\"#custom-managers-and-model-inheritance\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ini adalah bagaimana Django menangani pengelolaan penyesuaian dan <a class=\"reference internal\" href=\"/id/5.0/topics/db/models/#model-inheritance\"><span class=\"std std-ref\">model inheritance</span></a>:</p>\n<ol class=\"arabic simple\">\n<li><p>Pengelola dari kelas-kelas dasar selalu diwarisi oleh anak kelas, menggunakan urutan resolusi nama biasa Python (nama pada kelas anan menimpa semua lainnya; kemudian datang nama pada kelas induk pertama, dan seterusnya).</p></li>\n<li><p>Jika tidak ada pengelola dinyatakan pada model dan/atau induknya, Django secara otomatis membuat pengelola <code class=\"docutils literal notranslate\"><span class=\"pre\">objects</span></code>.</p></li>\n<li><p>Pengelola awalan pada sebuah kelas adalah antara satu dipilih dengan <a class=\"reference internal\" href=\"/id/5.0/ref/models/options/#django.db.models.Options.default_manager_name\" title=\"django.db.models.Options.default_manager_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Meta.default_manager_name</span></code></a>, atau pengelola pertama dinyatakan pada model, atau pengelola awalan dari model induk pertama.</p></li>\n</ol>\n<p>Aturan-aturan ini menyediakan keluwesan yang dibutuhkan jika anda ingin memasang sebuah kumpulan dari penyesuaian pengelola pada sekelompok model, melalui sebuah kelas dasar, tetapi masih menyesuaikan pengelola awalan. Sebagai contoh, misalkan anda mempunyai kelas dasar ini:</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\">AbstractBase</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">CustomManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">abstract</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n</code></pre></div>\n<p>If you use this directly in a child class, <code class=\"docutils literal notranslate\"><span class=\"pre\">objects</span></code> will be the default\nmanager if you declare no managers in the child class:</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\">ChildA</span><span class=\"p\">(</span><span class=\"n\">AbstractBase</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"c1\"># This class has CustomManager as the default manager.</span>\n    <span class=\"k\">pass</span>\n</code></pre></div>\n<p>Jika anda ingin mewarisi dari <code class=\"docutils literal notranslate\"><span class=\"pre\">AbstractBase</span></code>, tetapi menyediakan pengelola awalan berbeda, anda dapat menyediakan pengelola awalan pada kelas anak:</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\">ChildB</span><span class=\"p\">(</span><span class=\"n\">AbstractBase</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"c1\"># An explicit default manager.</span>\n    <span class=\"n\">default_manager</span> <span class=\"o\">=</span> <span class=\"n\">OtherManager</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Here, <code class=\"docutils literal notranslate\"><span class=\"pre\">default_manager</span></code> is the default. The <code class=\"docutils literal notranslate\"><span class=\"pre\">objects</span></code> manager is\nstill available, since it's inherited, but isn't used as the default.</p>\n<p>Akhirnya untuk contoh ini, misalkan anda ingin menambah pengelola tambahan pada kelas anak, tetapi masih menggunakan awalan dari <code class=\"docutils literal notranslate\"><span class=\"pre\">AbstractBase</span></code>. Anda tidak dapat menambah pengelola baru langsung dalam kelas anak, seperti itu akan menimpa awalan dan anda akan juga jelas menyertakan semua pengelola dari kelas dasar abstrak. Pemecahannya adalah menaruh pengelola tambahan dalam kelas dasar lain dan memperkenalkan itu kedalam hirarki warisan <em>setelah</em> awalan:</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\">ExtraManager</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">extra_manager</span> <span class=\"o\">=</span> <span class=\"n\">OtherManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">abstract</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ChildC</span><span class=\"p\">(</span><span class=\"n\">AbstractBase</span><span class=\"p\">,</span> <span class=\"n\">ExtraManager</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"c1\"># Default manager is CustomManager, but OtherManager is</span>\n    <span class=\"c1\"># also available via the &quot;extra_manager&quot; attribute.</span>\n    <span class=\"k\">pass</span>\n</code></pre></div>\n<p>Catat bahwa selagi anda dapat <em>menentukan</em> pengelolaan penyesuaian pada model abstrak, anda tidak dapat <em>meminta</em> metode apapun menggunakan model abstrak. Yaitu:</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\">ClassA</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">do_something</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>legal, tetapi:</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\">AbstractBase</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">do_something</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>akan memunculkan sebuah pengecualian. Ini karena pengelola bermaksud untuk mengenkapsulasi logika untuk mengelola kumpulan dari obyek. Sejak anda tidak dapat mempunyai sebuah kumpulan dari obyek-obyek abstrak, itu tidak masuk akal untuk mengelola mereka. Jika anda mempunyai fungsionalitas yang berlaku pada model abstrak, anda harus menaruh fungsionalitas itu dalam sebuah <code class=\"docutils literal notranslate\"><span class=\"pre\">staticmethod</span></code> atau <code class=\"docutils literal notranslate\"><span class=\"pre\">classmethod</span></code> pada model abstrak.</p>\n</section>\n<section id=\"implementation-concerns\">\n<h3>Perhatian penerapan<a class=\"heading-anchor\" href=\"#implementation-concerns\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Whatever features you add to your custom <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code>, it must be\npossible to make a shallow copy of a <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> instance; i.e., the\nfollowing code must work:</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\">import</span><span class=\"w\"> </span><span class=\"nn\">copy</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">manager</span> <span class=\"o\">=</span> <span class=\"n\">MyManager</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">my_copy</span> <span class=\"o\">=</span> <span class=\"n\">copy</span><span class=\"o\">.</span><span class=\"n\">copy</span><span class=\"p\">(</span><span class=\"n\">manager</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Django membuat salinan dangkal dari obyek-obyek pengelola selama permintaan tertentu; jika Manager anda tidak dapat disalin, permintaan itu akan gagal.</p>\n<p>Ini tidak akan menjadi sebuah masalah untuk kebanyakan pengelola penyesuaian. Jika anda hanya menambahkan metode sederhana ke <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> anda, itu tidak mungkin bahwa anda akan secara tidak sengaja membuat instance-instance dari tidak dapat disalin <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> anda. Bagaimanapun, jika anda menimpa <code class=\"docutils literal notranslate\"><span class=\"pre\">__getattr__</span></code> atau beberapa metode pribadi lain dari obyek <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> anda yang mengendalikan keadaan obyek, anda harus memastikan bahwa anda tidak mempengaruhi kemampuan dari <code class=\"docutils literal notranslate\"><span class=\"pre\">Manager</span></code> anda untuk disalin.</p>\n</section>\n</section>","rootId":"managers","toc":[{"title":"Nama pengelola","anchor":"manager-names","children":[]},{"title":"Pengelolaan penyesuaian","anchor":"custom-managers","children":[{"title":"Menambahkan metode pengelolaan tambahan","anchor":"adding-extra-manager-methods","children":[]},{"title":"Merubah QuerySet awal pengelolaan","anchor":"modifying-a-manager-s-initial-queryset","children":[]},{"title":"Pengelola awal","anchor":"default-managers","children":[]},{"title":"Pengelolaan dasar","anchor":"base-managers","children":[{"title":"Menggunakan pengelola untuk akses obyek terkait","anchor":"using-managers-for-related-object-access","children":[]},{"title":"Jangan menyaring hasil apapun dalam jenis ini dari pengelola subkelas","anchor":"don-t-filter-away-any-results-in-this-type-of-manager-subclass","children":[]}]},{"title":"Memanggil metode QuerySet penyesuaian dari pengelola","anchor":"calling-custom-queryset-methods-from-the-manager","children":[]},{"title":"Membuat pengelola dengan cara QuerySet","anchor":"creating-a-manager-with-queryset-methods","children":[{"title":"from_queryset()","anchor":"from-queryset","children":[]}]},{"title":"Pengelolaan penyesuaian dan warisan model","anchor":"custom-managers-and-model-inheritance","children":[]},{"title":"Perhatian penerapan","anchor":"implementation-concerns","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Menggunakan Django","url":"/id/5.0/topics/"},{"docname":"topics/db/index","title":"Model dan basisdata","url":"/id/5.0/topics/db/"}],"prev":{"docname":"topics/db/search","title":"Cari","url":"/id/5.0/topics/db/search/"},"next":{"docname":"topics/db/sql","title":"Melakukan permintaan SQL mentah","url":"/id/5.0/topics/db/sql/"},"formats":{"html":"/id/5.0/topics/db/managers/","markdown":"/id/5.0/topics/db/managers.md","json":"/id/5.0/topics/db/managers.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/topics/db/managers.txt","official":"https://docs.djangoproject.com/id/5.0/topics/db/managers/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}