{"title":"リレーション先オブジェクトのリファレンス","version":"5.2","locale":"ja","docname":"ref/models/relations","url":"/ja/5.2/ref/models/relations/","canonical":"https://djangodocs.dev/ja/5.2/ref/models/relations/","summary":"class RelatedManager Link to this definition # \"関係マネージャ（related manager）\"とは、1対多または多対多の関係するコンテキストで使用されるマネージャのことです。これは2つのケースで起こります: ForeignKey リレーションの \"反対側\"。つまり: Code…","html":"<h1>リレーション先オブジェクトのリファレンス<a class=\"heading-anchor\" href=\"#related-objects-reference\"><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.fields.related.RelatedManager\">\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\">RelatedManager</span></span><a class=\"heading-anchor\" href=\"#django.db.models.fields.related.RelatedManager\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>&quot;関係マネージャ（related manager）&quot;とは、1対多または多対多の関係するコンテキストで使用されるマネージャのことです。これは2つのケースで起こります:</p>\n<ul>\n<li><p><a class=\"reference internal\" href=\"/ja/5.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> リレーションの &quot;反対側&quot;。つまり:</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\">Blog</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"k\">pass</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Entry</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\">blog</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\">Blog</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> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>上記の例では、以下のメソッドがマネージャ <code class=\"docutils literal notranslate\"><span class=\"pre\">blog.entry_set</span></code> で利用可能です。</p>\n</li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.2/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Topping</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"k\">pass</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Pizza</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\">toppings</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"n\">Topping</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>この例では、以下のメソッドは <code class=\"docutils literal notranslate\"><span class=\"pre\">topping.pizza_set</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">pizza.toppings</span></code> の両方で利用できます。</p>\n</li>\n</ul>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.fields.related.RelatedManager.add\">\n<span class=\"sig-name descname\"><span class=\"pre\">add</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">objs</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">bulk</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">through_defaults</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.fields.related.RelatedManager.add\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.fields.related.RelatedManager.aadd\">\n<span class=\"sig-name descname\"><span class=\"pre\">aadd</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">objs</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">bulk</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">through_defaults</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.fields.related.RelatedManager.aadd\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aadd()</span></code></p>\n<p>リレーション先オブジェクトのセットに、指定したモデルオブジェクトを追加します。</p>\n<p>例:</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=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">234</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">e</span><span class=\"p\">)</span>  <span class=\"c1\"># Associates Entry e with Blog b.</span>\n</code></pre></div>\n<p>上の例では、 <a class=\"reference internal\" href=\"/ja/5.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> リレーションの場合、 <a class=\"reference internal\" href=\"/ja/5.2/ref/models/querysets/#django.db.models.query.QuerySet.update\" title=\"django.db.models.query.QuerySet.update\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">QuerySet.update()</span></code></a> を使って更新を行います。これにはオブジェクトが既に保存されている必要があります。</p>\n<p>引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">bulk=False</span></code> を使用することで、関係マネージャが <code class=\"docutils literal notranslate\"><span class=\"pre\">e.save()</span></code> を呼び出して更新を行うことができます。</p>\n<p>しかし、多対多のリレーションシップで <code class=\"docutils literal notranslate\"><span class=\"pre\">add()</span></code> を使用すると、 <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> メソッドは呼び出しません (<code class=\"docutils literal notranslate\"><span class=\"pre\">bulk</span></code> 引数は存在しません)。 <a class=\"reference internal\" href=\"/ja/5.2/ref/models/querysets/#django.db.models.query.QuerySet.bulk_create\" title=\"django.db.models.query.QuerySet.bulk_create\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">QuerySet.bulk_create()</span></code></a> を使用してリレーションシップを作成します。リレーションシップの作成時にカスタムロジックを実行する必要がある場合は、 <a class=\"reference internal\" href=\"/ja/5.2/ref/signals/#django.db.models.signals.m2m_changed\" title=\"django.db.models.signals.m2m_changed\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">m2m_changed</span></code></a> シグナルを待ち受けます。</p>\n<p>すでに存在するリレーションに <code class=\"docutils literal notranslate\"><span class=\"pre\">add()</span></code> を使っても、リレーションは複製されませんが、シグナルは発生します。</p>\n<p>多対多のリレーションシップの場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">add()</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">*objs</span></code> 引数としてモデルインスタンスかフィールドの値（通常は主キー）を受け付けます。</p>\n<p>必要であれば、引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">through_defaults</span></code> を使用して、新しい <a class=\"reference internal\" href=\"/ja/5.2/topics/db/models/#intermediary-manytomany\"><span class=\"std std-ref\">中間モデル</span></a> インスタンスの値を指定します。呼び出し可能オブジェクトを <code class=\"docutils literal notranslate\"><span class=\"pre\">through_defaults</span></code> 辞書の値として使用することができ、中間インスタンスを作成する前に一度だけ評価されます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.fields.related.RelatedManager.create\">\n<span class=\"sig-name descname\"><span class=\"pre\">create</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">through_defaults</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.fields.related.RelatedManager.create\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.fields.related.RelatedManager.acreate\">\n<span class=\"sig-name descname\"><span class=\"pre\">acreate</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">through_defaults</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.fields.related.RelatedManager.acreate\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">acreate()</span></code></p>\n<p>新しいオブジェクトを作成して保存し、リレーション先オブジェクトのセットに入れます。新しく作成されたオブジェクトを返します:</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=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;Hello&quot;</span><span class=\"p\">,</span> <span class=\"n\">body_text</span><span class=\"o\">=</span><span class=\"s2\">&quot;Hi&quot;</span><span class=\"p\">,</span> <span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n\n<span class=\"go\"># No need to call e.save() at this point -- it&#39;s already been saved.</span>\n</code></pre></div>\n<p>これは下記のコードと等価です（しかし、よりシンプルです）:</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=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"p\">(</span><span class=\"n\">blog</span><span class=\"o\">=</span><span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;Hello&quot;</span><span class=\"p\">,</span> <span class=\"n\">body_text</span><span class=\"o\">=</span><span class=\"s2\">&quot;Hi&quot;</span><span class=\"p\">,</span> <span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">force_insert</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>リレーションシップを定義するモデルのキーワード引数を指定する必要はないことに注意してください。上の例では、 <code class=\"docutils literal notranslate\"><span class=\"pre\">create()</span></code> にパラメータ <code class=\"docutils literal notranslate\"><span class=\"pre\">blog</span></code> を渡していません。Django は新しい <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> オブジェクトの <code class=\"docutils literal notranslate\"><span class=\"pre\">blog</span></code> フィールドを <code class=\"docutils literal notranslate\"><span class=\"pre\">b</span></code> に設定すべきであると判断します。</p>\n<p>必要であれば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">through_defaults</span></code> 引数を使用して、新しい <a class=\"reference internal\" href=\"/ja/5.2/topics/db/models/#intermediary-manytomany\"><span class=\"std std-ref\">中間モデル</span></a> インスタンスの値を指定します。呼び出し可能オブジェクトを <code class=\"docutils literal notranslate\"><span class=\"pre\">through_defaults</span></code> 辞書の値として使用できます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.fields.related.RelatedManager.remove\">\n<span class=\"sig-name descname\"><span class=\"pre\">remove</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">objs</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">bulk</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.fields.related.RelatedManager.remove\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.fields.related.RelatedManager.aremove\">\n<span class=\"sig-name descname\"><span class=\"pre\">aremove</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">objs</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">bulk</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.fields.related.RelatedManager.aremove\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aremove()</span></code></p>\n<p>リレーション先オブジェクトのセットから指定されたモデルオブジェクトを削除します:</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=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">234</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">e</span><span class=\"p\">)</span>  <span class=\"c1\"># Disassociates Entry e from Blog b.</span>\n</code></pre></div>\n<p>上記の例では <a class=\"reference internal\" href=\"#django.db.models.fields.related.RelatedManager.add\" title=\"django.db.models.fields.related.RelatedManager.add\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">add()</span></code></a> と同様に <code class=\"docutils literal notranslate\"><span class=\"pre\">e.save()</span></code> が呼び出されて更新が行われます。しかし、多対多のリレーションシップで <code class=\"docutils literal notranslate\"><span class=\"pre\">remove()</span></code> を使用すると、 <a class=\"reference internal\" href=\"/ja/5.2/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> を使用してリレーションシップを削除するので、モデルの <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> メソッドは呼び出されません。リレーションシップが削除されたときにカスタムコードを実行したい場合は、 <a class=\"reference internal\" href=\"/ja/5.2/ref/signals/#django.db.models.signals.m2m_changed\" title=\"django.db.models.signals.m2m_changed\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">m2m_changed</span></code></a> シグナルを待ち受けます。</p>\n<p>多対多のリレーションシップの場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">remove()</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">*objs</span></code> 引数としてモデルインスタンスかフィールドの値（通常は主キー）を受け付けます。</p>\n<p><a class=\"reference internal\" href=\"/ja/5.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> オブジェクトでは、このメソッドは <code class=\"docutils literal notranslate\"><span class=\"pre\">null=True</span></code> の場合のみ存在します。リレーション先フィールドを <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> (<code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code>) に設定できない場合、リレーション先オブジェクトを別のオブジェクトに追加せずに削除することはできません。上の例では、 <code class=\"docutils literal notranslate\"><span class=\"pre\">b.entry_set()</span></code> から <code class=\"docutils literal notranslate\"><span class=\"pre\">e</span></code> を削除することは <code class=\"docutils literal notranslate\"><span class=\"pre\">e.blog</span> <span class=\"pre\">=</span> <span class=\"pre\">None</span></code> と等価であり、 <code class=\"docutils literal notranslate\"><span class=\"pre\">blog</span></code> <a class=\"reference internal\" href=\"/ja/5.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> には <code class=\"docutils literal notranslate\"><span class=\"pre\">null=True</span></code> がないので、これは無効です。</p>\n<p><a class=\"reference internal\" href=\"/ja/5.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> オブジェクトの場合、このメソッドは <code class=\"docutils literal notranslate\"><span class=\"pre\">bulk</span></code> 引数を受け取り、操作の実行方法を制御します。もし <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> (デフォルト) なら、 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet.update()</span></code> が使用されます。もし <code class=\"docutils literal notranslate\"><span class=\"pre\">bulk=False</span></code> なら、代わりに個々のモデルインスタンスの <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> メソッドが呼び出されます。これはパフォーマンスを犠牲にし、 <a class=\"reference internal\" href=\"/ja/5.2/ref/signals/#django.db.models.signals.pre_save\" title=\"django.db.models.signals.pre_save\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">pre_save</span></code></a> シグナルと <a class=\"reference internal\" href=\"/ja/5.2/ref/signals/#django.db.models.signals.post_save\" title=\"django.db.models.signals.post_save\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">post_save</span></code></a> シグナルをトリガーします。</p>\n<p>多対多のリレーションシップの場合、キーワード引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">bulk</span></code> は存在しません。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.fields.related.RelatedManager.clear\">\n<span class=\"sig-name descname\"><span class=\"pre\">clear</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">bulk</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.fields.related.RelatedManager.clear\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.fields.related.RelatedManager.aclear\">\n<span class=\"sig-name descname\"><span class=\"pre\">aclear</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">bulk</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.fields.related.RelatedManager.aclear\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aclear()</span></code></p>\n<p>リレーション先オブジェクトのセットからすべてのオブジェクトを削除します:</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=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"o\">.</span><span class=\"n\">clear</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>これはリレーション先のオブジェクトを削除するのではなく、単に関連付けを解除するだけであることに注意してください。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">remove()</span></code> と同様に、 <code class=\"docutils literal notranslate\"><span class=\"pre\">clear()</span></code> は <a class=\"reference internal\" href=\"/ja/5.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> で <code class=\"docutils literal notranslate\"><span class=\"pre\">null=True</span></code> の場合にのみ使用可能で、 <code class=\"docutils literal notranslate\"><span class=\"pre\">bulk</span></code> キーワード引数も受け付けます。</p>\n<p>多対多のリレーションシップの場合、キーワード引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">bulk</span></code> は存在しません。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.fields.related.RelatedManager.set\">\n<span class=\"sig-name descname\"><span class=\"pre\">set</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">objs</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">bulk</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">clear</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">through_defaults</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.fields.related.RelatedManager.set\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.fields.related.RelatedManager.aset\">\n<span class=\"sig-name descname\"><span class=\"pre\">aset</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">objs</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">bulk</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">clear</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">through_defaults</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.fields.related.RelatedManager.aset\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>非同期バージョン</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aset()</span></code></p>\n<p>リレーション先のオブジェクトのセットを置き換えます:</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=\"n\">new_list</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">obj1</span><span class=\"p\">,</span> <span class=\"n\">obj2</span><span class=\"p\">,</span> <span class=\"n\">obj3</span><span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">related_set</span><span class=\"o\">.</span><span class=\"n\">set</span><span class=\"p\">(</span><span class=\"n\">new_list</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>このメソッドには <code class=\"docutils literal notranslate\"><span class=\"pre\">clear</span></code> 引数を渡すことができます。もし <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> (デフォルト) なら、 <code class=\"docutils literal notranslate\"><span class=\"pre\">remove()</span></code> を使って新しいセットから欠けている要素を削除し、新しい要素だけを追加します。もし <code class=\"docutils literal notranslate\"><span class=\"pre\">clear=True</span></code> なら、代わりに <code class=\"docutils literal notranslate\"><span class=\"pre\">clear()</span></code> メソッドが呼び出され、セット全体が一度に追加されます。</p>\n<p><a class=\"reference internal\" href=\"/ja/5.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> オブジェクトの場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">bulk</span></code> 引数は <a class=\"reference internal\" href=\"#django.db.models.fields.related.RelatedManager.add\" title=\"django.db.models.fields.related.RelatedManager.add\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">add()</span></code></a> と <a class=\"reference internal\" href=\"#django.db.models.fields.related.RelatedManager.remove\" title=\"django.db.models.fields.related.RelatedManager.remove\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">remove()</span></code></a> に渡されます。</p>\n<p>多対多のリレーションシップの場合、キーワード引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">bulk</span></code> は存在しません。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">set()</span></code> は複合操作であるため、競合状態になりやすいことに注意してください。例えば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">clear()</span></code> を呼び出してから <code class=\"docutils literal notranslate\"><span class=\"pre\">add()</span></code> を呼び出すまでの間に、新しいオブジェクトがデータベースに追加される可能性があります。</p>\n<p>多対多のリレーションシップの場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">set()</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">objs</span></code> 引数としてモデルインスタンスかフィールド値（通常は主キー）のリストを受け付けます。</p>\n<p>必要であれば、引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">through_defaults</span></code> を使用して、新しい <a class=\"reference internal\" href=\"/ja/5.2/topics/db/models/#intermediary-manytomany\"><span class=\"std std-ref\">中間モデル</span></a> インスタンスの値を指定します。呼び出し可能オブジェクトを <code class=\"docutils literal notranslate\"><span class=\"pre\">through_defaults</span></code> 辞書の値として使用することができ、中間インスタンスを作成する前に一度だけ評価されます。</p>\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">add()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">aadd()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">create()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">acreate()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">remove()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">aremove()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">clear()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">aclear()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">set()</span></code>, そして <code class=\"docutils literal notranslate\"><span class=\"pre\">aset()</span></code> はすべて、すべてのタイプのリレーション先のフィールドに対してデータベースの変更を即座に適用することに注意してください。つまり、リレーションシップのどちらの側でも <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code>/<code class=\"docutils literal notranslate\"><span class=\"pre\">asave()</span></code> を呼び出す必要はありません。</p>\n<p><a class=\"reference internal\" href=\"/ja/5.2/ref/models/querysets/#django.db.models.query.QuerySet.prefetch_related\" title=\"django.db.models.query.QuerySet.prefetch_related\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">prefetch_related()</span></code></a> を使用すると、 <code class=\"docutils literal notranslate\"><span class=\"pre\">add()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">aadd()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">remove()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">aremove()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">clear()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">aclear()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">set()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">aset()</span></code> メソッドがプリフェッチキャッシュをクリアします。</p>\n</aside>\n</dd></dl>","rootId":"related-objects-reference","toc":[],"breadcrumbs":[{"docname":"ref/index","title":"API リファレンス","url":"/ja/5.2/ref/"},{"docname":"ref/models/index","title":"モデル","url":"/ja/5.2/ref/models/"}],"prev":{"docname":"ref/models/meta","title":"モデル _meta API","url":"/ja/5.2/ref/models/meta/"},"next":{"docname":"ref/models/class","title":"Model クラスのリファレンス","url":"/ja/5.2/ref/models/class/"},"formats":{"html":"/ja/5.2/ref/models/relations/","markdown":"/ja/5.2/ref/models/relations.md","json":"/ja/5.2/ref/models/relations.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/ref/models/relations.txt","official":"https://docs.djangoproject.com/ja/5.2/ref/models/relations/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}