{"title":"Hubungan banyak-ke-satu","version":"1.11","locale":"id","docname":"topics/db/examples/many_to_one","url":"/id/1.11/topics/db/examples/many_to_one/","canonical":"https://djangodocs.dev/id/1.11/topics/db/examples/many_to_one/","summary":"Untuk menentukan hubungan many-to-one, gunakan ForeignKey : Code Copy from django.db import models class Reporter ( models . Model ): first_name = models .…","html":"<h1>Hubungan banyak-ke-satu<a class=\"heading-anchor\" href=\"#many-to-one-relationships\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Untuk menentukan hubungan many-to-one, gunakan <a class=\"reference internal\" href=\"/id/1.11/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">Reporter</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    first_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    last_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    email <span class=\"o\">=</span> models<span class=\"o\">.</span>EmailField<span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>              <span class=\"c1\"># __unicode__ on Python 2</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\"> </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>first_name<span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span>last_name<span class=\"p\">)</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">Article</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    headline <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    pub_date <span class=\"o\">=</span> models<span class=\"o\">.</span>DateField<span class=\"p\">()</span>\n    reporter <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>Reporter<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>              <span class=\"c1\"># __unicode__ on Python 2</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>headline\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        ordering <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;headline&#39;</span><span class=\"p\">,)</span>\n</code></pre></div>\n<p>Apa yang mengikuti adalah contoh-contoh dari tindakan yang dapat dilakukan menggunakan fasilitas API Python.</p>\n<p>Buat sedikir Reporter:</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>r <span class=\"o\">=</span> Reporter<span class=\"p\">(</span>first_name<span class=\"o\">=</span><span class=\"s1\">&#39;John&#39;</span><span class=\"p\">,</span> last_name<span class=\"o\">=</span><span class=\"s1\">&#39;Smith&#39;</span><span class=\"p\">,</span> email<span class=\"o\">=</span><span class=\"s1\">&#39;john@example.com&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>r<span class=\"o\">.</span>save<span class=\"p\">()</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>r2 <span class=\"o\">=</span> Reporter<span class=\"p\">(</span>first_name<span class=\"o\">=</span><span class=\"s1\">&#39;Paul&#39;</span><span class=\"p\">,</span> last_name<span class=\"o\">=</span><span class=\"s1\">&#39;Jones&#39;</span><span class=\"p\">,</span> email<span class=\"o\">=</span><span class=\"s1\">&#39;paul@example.com&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>r2<span class=\"o\">.</span>save<span class=\"p\">()</span>\n</code></pre></div>\n<p>Buat sebuah Artikel:</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=\"nn\">datetime</span> <span class=\"kn\">import</span> date\n<span class=\"gp\">&gt;&gt;&gt; </span>a <span class=\"o\">=</span> Article<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> headline<span class=\"o\">=</span><span class=\"s2\">&quot;This is a test&quot;</span><span class=\"p\">,</span> pub_date<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"mi\">27</span><span class=\"p\">),</span> reporter<span class=\"o\">=</span>r<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>a<span class=\"o\">.</span>save<span class=\"p\">()</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>a<span class=\"o\">.</span>reporter<span class=\"o\">.</span>id\n<span class=\"go\">1</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>a<span class=\"o\">.</span>reporter\n<span class=\"go\">&lt;Reporter: John Smith&gt;</span>\n</code></pre></div>\n<p>Catat bahwa anda harus menyimpan sebuah obyek sebelum itu dapat diberikan ke hubungan foreign key. Sebagai contoh, membuat <code class=\"docutils literal notranslate\">Article</code> dengan <code class=\"docutils literal notranslate\">Reporter</code> tidak disimpan memunculkan <code class=\"docutils literal notranslate\">ValueError</code>:</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>r3 <span class=\"o\">=</span> Reporter<span class=\"p\">(</span>first_name<span class=\"o\">=</span><span class=\"s1\">&#39;John&#39;</span><span class=\"p\">,</span> last_name<span class=\"o\">=</span><span class=\"s1\">&#39;Smith&#39;</span><span class=\"p\">,</span> email<span class=\"o\">=</span><span class=\"s1\">&#39;john@example.com&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Article<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>headline<span class=\"o\">=</span><span class=\"s2\">&quot;This is a test&quot;</span><span class=\"p\">,</span> pub_date<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"mi\">27</span><span class=\"p\">),</span> reporter<span class=\"o\">=</span>r3<span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">ValueError</span>: save() prohibited to prevent data loss due to unsaved related object &#39;reporter&#39;.\n</code></pre></div>\n<p>Obyek artikel mempunyai akses ke obyek Reporter terkait:</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>r <span class=\"o\">=</span> a<span class=\"o\">.</span>reporter\n</code></pre></div>\n<p>Pada Python 2, ini adalah string dari jenis <code class=\"docutils literal notranslate\">str</code> daripada string unicode karena itulah yang apa telah digunakan dalam pembuatan dari pelapor (dan kami belum menyegarkan data dari basisdata, yang selalu mengembalikan string unicode):</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>r<span class=\"o\">.</span>first_name<span class=\"p\">,</span> r<span class=\"o\">.</span>last_name\n<span class=\"go\">(&#39;John&#39;, &#39;Smith&#39;)</span>\n</code></pre></div>\n<p>Buat sebuah Article melalui obyek Reporter:</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>new_article <span class=\"o\">=</span> r<span class=\"o\">.</span>article_set<span class=\"o\">.</span>create<span class=\"p\">(</span>headline<span class=\"o\">=</span><span class=\"s2\">&quot;John&#39;s second story&quot;</span><span class=\"p\">,</span> pub_date<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"mi\">29</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>new_article\n<span class=\"go\">&lt;Article: John&#39;s second story&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>new_article<span class=\"o\">.</span>reporter\n<span class=\"go\">&lt;Reporter: John Smith&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>new_article<span class=\"o\">.</span>reporter<span class=\"o\">.</span>id\n<span class=\"go\">1</span>\n</code></pre></div>\n<p>Buat sebuah artikel, dan tambah itu ke kumpulan artikel:</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>new_article2 <span class=\"o\">=</span> Article<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>headline<span class=\"o\">=</span><span class=\"s2\">&quot;Paul&#39;s story&quot;</span><span class=\"p\">,</span> pub_date<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">2006</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">17</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>r<span class=\"o\">.</span>article_set<span class=\"o\">.</span>add<span class=\"p\">(</span>new_article2<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>new_article2<span class=\"o\">.</span>reporter\n<span class=\"go\">&lt;Reporter: John Smith&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>new_article2<span class=\"o\">.</span>reporter<span class=\"o\">.</span>id\n<span class=\"go\">1</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>r<span class=\"o\">.</span>article_set<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: John&#39;s second story&gt;, &lt;Article: Paul&#39;s story&gt;, &lt;Article: This is a test&gt;]&gt;</span>\n</code></pre></div>\n<p>Tambah artikel sama ke kumpulan artikel berbeda -  periksa bahwa itu berpindah:</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>r2<span class=\"o\">.</span>article_set<span class=\"o\">.</span>add<span class=\"p\">(</span>new_article2<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>new_article2<span class=\"o\">.</span>reporter<span class=\"o\">.</span>id\n<span class=\"go\">2</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>new_article2<span class=\"o\">.</span>reporter\n<span class=\"go\">&lt;Reporter: Paul Jones&gt;</span>\n</code></pre></div>\n<p>Menambahkan sebuah obyek dari jenis salah memunculkan TypeError:</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>r<span class=\"o\">.</span>article_set<span class=\"o\">.</span>add<span class=\"p\">(</span>r2<span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">TypeError</span>: &#39;Article&#39; instance expected, got &lt;Reporter: Paul Jones&gt;\n\n<span class=\"gp\">&gt;&gt;&gt; </span>r<span class=\"o\">.</span>article_set<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: John&#39;s second story&gt;, &lt;Article: This is a test&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>r2<span class=\"o\">.</span>article_set<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: Paul&#39;s story&gt;]&gt;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>r<span class=\"o\">.</span>article_set<span class=\"o\">.</span>count<span class=\"p\">()</span>\n<span class=\"go\">2</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>r2<span class=\"o\">.</span>article_set<span class=\"o\">.</span>count<span class=\"p\">()</span>\n<span class=\"go\">1</span>\n</code></pre></div>\n<p>Catat bahwa di contoh terakhir artikel telah dipindahkan dari John ke Paul.</p>\n<p>Pengelola terkait mendukung pencarian bidang-bidang juga. API otomatis mengikuti hubungan sejauh anda butuhkan. Gunakan garis bawah ganda untuk memisahkan hubungan. Ini bekerja sebanyak tingkatan yang anda inginkan. Tidak ada batasan. Sebagai contoh:</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>r<span class=\"o\">.</span>article_set<span class=\"o\">.</span>filter<span class=\"p\">(</span>headline__startswith<span class=\"o\">=</span><span class=\"s1\">&#39;This&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: This is a test&gt;]&gt;</span>\n\n<span class=\"go\"># Find all Articles for any Reporter whose first name is &quot;John&quot;.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Article<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>reporter__first_name<span class=\"o\">=</span><span class=\"s1\">&#39;John&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: John&#39;s second story&gt;, &lt;Article: This is a test&gt;]&gt;</span>\n</code></pre></div>\n<p>Benar-benar cocok tersirat disini:</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>Article<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>reporter__first_name<span class=\"o\">=</span><span class=\"s1\">&#39;John&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: John&#39;s second story&gt;, &lt;Article: This is a test&gt;]&gt;</span>\n</code></pre></div>\n<p>Permintaan dua kali lebih bidang terkait. Ini menterjemahkan pada sebuah keadaan AND dalam klausa WHERE:</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>Article<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>reporter__first_name<span class=\"o\">=</span><span class=\"s1\">&#39;John&#39;</span><span class=\"p\">,</span> reporter__last_name<span class=\"o\">=</span><span class=\"s1\">&#39;Smith&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: John&#39;s second story&gt;, &lt;Article: This is a test&gt;]&gt;</span>\n</code></pre></div>\n<p>Untuk pencarian terkait anda dapat menyediakan sebuah nilai primary key atau lewatkan obyek terkait dengan tegas:</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>Article<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>reporter__pk<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: John&#39;s second story&gt;, &lt;Article: This is a test&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Article<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>reporter<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: John&#39;s second story&gt;, &lt;Article: This is a test&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Article<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>reporter<span class=\"o\">=</span>r<span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: John&#39;s second story&gt;, &lt;Article: This is a test&gt;]&gt;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Article<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>reporter__in<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">])</span><span class=\"o\">.</span>distinct<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: John&#39;s second story&gt;, &lt;Article: Paul&#39;s story&gt;, &lt;Article: This is a test&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Article<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>reporter__in<span class=\"o\">=</span><span class=\"p\">[</span>r<span class=\"p\">,</span>r2<span class=\"p\">])</span><span class=\"o\">.</span>distinct<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: John&#39;s second story&gt;, &lt;Article: Paul&#39;s story&gt;, &lt;Article: This is a test&gt;]&gt;</span>\n</code></pre></div>\n<p>Anda dapat juga menggunakan queryset daripada daftar harfiah dari instance:</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>Article<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>reporter__in<span class=\"o\">=</span>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>first_name<span class=\"o\">=</span><span class=\"s1\">&#39;John&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>distinct<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: John&#39;s second story&gt;, &lt;Article: This is a test&gt;]&gt;</span>\n</code></pre></div>\n<p>Meminta di arah berlawanan:</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>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>article__pk<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Reporter: John Smith&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>article<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Reporter: John Smith&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>article<span class=\"o\">=</span>a<span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Reporter: John Smith&gt;]&gt;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>article__headline__startswith<span class=\"o\">=</span><span class=\"s1\">&#39;This&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Reporter: John Smith&gt;, &lt;Reporter: John Smith&gt;, &lt;Reporter: John Smith&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>article__headline__startswith<span class=\"o\">=</span><span class=\"s1\">&#39;This&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>distinct<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Reporter: John Smith&gt;]&gt;</span>\n</code></pre></div>\n<p>Menghitung dalam arah berlawanan bekerja dalam hubungan dengan distinct():</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>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>article__headline__startswith<span class=\"o\">=</span><span class=\"s1\">&#39;This&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>count<span class=\"p\">()</span>\n<span class=\"go\">3</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>article__headline__startswith<span class=\"o\">=</span><span class=\"s1\">&#39;This&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>distinct<span class=\"p\">()</span><span class=\"o\">.</span>count<span class=\"p\">()</span>\n<span class=\"go\">1</span>\n</code></pre></div>\n<p>Permintaan dapat berputar seperti lingkaran:</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>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>article__reporter__first_name__startswith<span class=\"o\">=</span><span class=\"s1\">&#39;John&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Reporter: John Smith&gt;, &lt;Reporter: John Smith&gt;, &lt;Reporter: John Smith&gt;, &lt;Reporter: John Smith&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>article__reporter__first_name__startswith<span class=\"o\">=</span><span class=\"s1\">&#39;John&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>distinct<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Reporter: John Smith&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>article__reporter<span class=\"o\">=</span>r<span class=\"p\">)</span><span class=\"o\">.</span>distinct<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Reporter: John Smith&gt;]&gt;</span>\n</code></pre></div>\n<p>Jika anda menghapus sebuah reporter, artikel dia akan dihapus (menganggap bahwa ForeignKey telah ditentukan dengan <a class=\"reference internal\" href=\"/id/1.11/ref/models/fields/#django.db.models.ForeignKey.on_delete\" title=\"django.db.models.ForeignKey.on_delete\"><code class=\"xref py py-attr docutils literal notranslate\">django.db.models.ForeignKey.on_delete</code></a> setel menjadi <code class=\"docutils literal notranslate\">CASCADE</code>, yang merupakan awalan):</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>Article<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: John&#39;s second story&gt;, &lt;Article: Paul&#39;s story&gt;, &lt;Article: This is a test&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>order_by<span class=\"p\">(</span><span class=\"s1\">&#39;first_name&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Reporter: John Smith&gt;, &lt;Reporter: Paul Jones&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>r2<span class=\"o\">.</span>delete<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Article<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: John&#39;s second story&gt;, &lt;Article: This is a test&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>order_by<span class=\"p\">(</span><span class=\"s1\">&#39;first_name&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Reporter: John Smith&gt;]&gt;</span>\n</code></pre></div>\n<p>Anda dapat menghapus menggunakan JOIN di permintaan:</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>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>article__headline__startswith<span class=\"o\">=</span><span class=\"s1\">&#39;This&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>delete<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet []&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Article<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet []&gt;</span>\n</code></pre></div>","rootId":"many-to-one-relationships","toc":[],"breadcrumbs":[{"docname":"topics/index","title":"Menggunakan Django","url":"/id/1.11/topics/"},{"docname":"topics/db/index","title":"Model dan basisdata","url":"/id/1.11/topics/db/"},{"docname":"topics/db/examples/index","title":"Contoh-contoh dari hubungan model penggunaan API","url":"/id/1.11/topics/db/examples/"}],"prev":{"docname":"topics/db/examples/many_to_many","title":"Hubungan banyak-ke-banyak","url":"/id/1.11/topics/db/examples/many_to_many/"},"next":{"docname":"topics/db/examples/one_to_one","title":"Hubungan satu-ke-satu","url":"/id/1.11/topics/db/examples/one_to_one/"},"formats":{"html":"/id/1.11/topics/db/examples/many_to_one/","markdown":"/id/1.11/topics/db/examples/many_to_one.md","json":"/id/1.11/topics/db/examples/many_to_one.json"},"source":"https://github.com/django/django/blob/stable/1.11.x/docs/topics/db/examples/many_to_one.txt","official":"https://docs.djangoproject.com/id/1.11/topics/db/examples/many_to_one/","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","fr","ja","id","pt-br","ko","es","el","pl"]}