{"title":"データベースのマイグレーションを書く","version":"3.0","locale":"ja","docname":"howto/writing-migrations","url":"/ja/3.0/howto/writing-migrations/","canonical":"https://djangodocs.dev/ja/3.0/howto/writing-migrations/","summary":"このドキュメントでは、遭遇する可能性のあるいくつかのシナリオに対する、データベースのマイグレーションの構成方法と書き方について説明します。マイグレーションに関する入門的な資料を探しているなら、 トピック別ガイド を読んでください。 データのマイグレーションと複数のデータベース Link to this heading #…","html":"<h1>データベースのマイグレーションを書く<a class=\"heading-anchor\" href=\"#writing-database-migrations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>このドキュメントでは、遭遇する可能性のあるいくつかのシナリオに対する、データベースのマイグレーションの構成方法と書き方について説明します。マイグレーションに関する入門的な資料を探しているなら、<a class=\"reference internal\" href=\"/ja/3.0/topics/migrations/\"><span class=\"doc\">トピック別ガイド</span></a> を読んでください。</p>\n<section id=\"data-migrations-and-multiple-databases\">\n<span id=\"id1\"></span><h2>データのマイグレーションと複数のデータベース<a class=\"heading-anchor\" href=\"#data-migrations-and-multiple-databases\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>When using multiple databases, you may need to figure out whether or not to\nrun a migration against a particular database. For example, you may want to\n<strong>only</strong> run a migration on a particular database.</p>\n<p>In order to do that you can check the database connection's alias inside a\n<code class=\"docutils literal notranslate\"><span class=\"pre\">RunPython</span></code> operation by looking at the <code class=\"docutils literal notranslate\"><span class=\"pre\">schema_editor.connection.alias</span></code>\nattribute:</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\">migrations</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">forwards</span><span class=\"p\">(</span><span class=\"n\">apps</span><span class=\"p\">,</span> <span class=\"n\">schema_editor</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">schema_editor</span><span class=\"o\">.</span><span class=\"n\">connection</span><span class=\"o\">.</span><span class=\"n\">alias</span> <span class=\"o\">!=</span> <span class=\"s1\">&#39;default&#39;</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span>\n    <span class=\"c1\"># Your migration code goes here</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Migration</span><span class=\"p\">(</span><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">Migration</span><span class=\"p\">):</span>\n\n    <span class=\"n\">dependencies</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"c1\"># Dependencies to other migrations</span>\n    <span class=\"p\">]</span>\n\n    <span class=\"n\">operations</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">RunPython</span><span class=\"p\">(</span><span class=\"n\">forwards</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>You can also provide hints that will be passed to the <a class=\"reference internal\" href=\"/ja/3.0/topics/db/multi-db/#allow_migrate\" title=\"allow_migrate\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">allow_migrate()</span></code></a>\nmethod of database routers as <code class=\"docutils literal notranslate\"><span class=\"pre\">**hints</span></code>:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">myapp/dbrouters.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyRouter</span><span class=\"p\">:</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">allow_migrate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">db</span><span class=\"p\">,</span> <span class=\"n\">app_label</span><span class=\"p\">,</span> <span class=\"n\">model_name</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">hints</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"s1\">&#39;target_db&#39;</span> <span class=\"ow\">in</span> <span class=\"n\">hints</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">db</span> <span class=\"o\">==</span> <span class=\"n\">hints</span><span class=\"p\">[</span><span class=\"s1\">&#39;target_db&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"kc\">True</span>\n</code></pre></figure>\n<p>Then, to leverage this in your migrations, do the following:</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\">migrations</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">forwards</span><span class=\"p\">(</span><span class=\"n\">apps</span><span class=\"p\">,</span> <span class=\"n\">schema_editor</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Your migration code goes here</span>\n    <span class=\"o\">...</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Migration</span><span class=\"p\">(</span><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">Migration</span><span class=\"p\">):</span>\n\n    <span class=\"n\">dependencies</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"c1\"># Dependencies to other migrations</span>\n    <span class=\"p\">]</span>\n\n    <span class=\"n\">operations</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">RunPython</span><span class=\"p\">(</span><span class=\"n\">forwards</span><span class=\"p\">,</span> <span class=\"n\">hints</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;target_db&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;default&#39;</span><span class=\"p\">}),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>If your <code class=\"docutils literal notranslate\"><span class=\"pre\">RunPython</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">RunSQL</span></code> operation only affects one model, it's good\npractice to pass <code class=\"docutils literal notranslate\"><span class=\"pre\">model_name</span></code> as a hint to make it as transparent as possible\nto the router. This is especially important for reusable and third-party apps.</p>\n</section>\n<section id=\"migrations-that-add-unique-fields\">\n<h2>Migrations that add unique fields<a class=\"heading-anchor\" href=\"#migrations-that-add-unique-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Applying a &quot;plain&quot; migration that adds a unique non-nullable field to a table\nwith existing rows will raise an error because the value used to populate\nexisting rows is generated only once, thus breaking the unique constraint.</p>\n<p>Therefore, the following steps should be taken. In this example, we'll add a\nnon-nullable <a class=\"reference internal\" href=\"/ja/3.0/ref/models/fields/#django.db.models.UUIDField\" title=\"django.db.models.UUIDField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">UUIDField</span></code></a> with a default value. Modify\nthe respective field according to your needs.</p>\n<ul>\n<li><p>Add the field on your model with <code class=\"docutils literal notranslate\"><span class=\"pre\">default=uuid.uuid4</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">unique=True</span></code>\narguments (choose an appropriate default for the type of the field you're\nadding).</p></li>\n<li><p>Run the <a class=\"reference internal\" href=\"/ja/3.0/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemigrations</span></code></a> command. This should generate a migration\nwith an <code class=\"docutils literal notranslate\"><span class=\"pre\">AddField</span></code> operation.</p></li>\n<li><p>Generate two empty migration files for the same app by running\n<code class=\"docutils literal notranslate\"><span class=\"pre\">makemigrations</span> <span class=\"pre\">myapp</span> <span class=\"pre\">--empty</span></code> twice. We've renamed the migration files to\ngive them meaningful names in the examples below.</p></li>\n<li><p>Copy the <code class=\"docutils literal notranslate\"><span class=\"pre\">AddField</span></code> operation from the auto-generated migration (the first\nof the three new files) to the last migration, change <code class=\"docutils literal notranslate\"><span class=\"pre\">AddField</span></code> to\n<code class=\"docutils literal notranslate\"><span class=\"pre\">AlterField</span></code>, and add imports of <code class=\"docutils literal notranslate\"><span class=\"pre\">uuid</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">models</span></code>. For example:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">0006_remove_uuid_null.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"c1\"># Generated by Django A.B on YYYY-MM-DD HH:MM</span>\n<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\">migrations</span><span class=\"p\">,</span> <span class=\"n\">models</span>\n<span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">uuid</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Migration</span><span class=\"p\">(</span><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">Migration</span><span class=\"p\">):</span>\n\n    <span class=\"n\">dependencies</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"s1\">&#39;myapp&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;0005_populate_uuid_values&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n\n    <span class=\"n\">operations</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">AlterField</span><span class=\"p\">(</span>\n            <span class=\"n\">model_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;mymodel&#39;</span><span class=\"p\">,</span>\n            <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;uuid&#39;</span><span class=\"p\">,</span>\n            <span class=\"n\">field</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">UUIDField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">uuid</span><span class=\"o\">.</span><span class=\"n\">uuid4</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span>\n        <span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></figure>\n</li>\n<li><p>最初の移行ファイルを編集します。 生成された移行クラスは次のようになります:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">0004_add_uuid_field.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Migration</span><span class=\"p\">(</span><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">Migration</span><span class=\"p\">):</span>\n\n    <span class=\"n\">dependencies</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"s1\">&#39;myapp&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;0003_auto_20150129_1705&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n\n    <span class=\"n\">operations</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">AddField</span><span class=\"p\">(</span>\n            <span class=\"n\">model_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;mymodel&#39;</span><span class=\"p\">,</span>\n            <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;uuid&#39;</span><span class=\"p\">,</span>\n            <span class=\"n\">field</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">UUIDField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">uuid</span><span class=\"o\">.</span><span class=\"n\">uuid4</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span>\n        <span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></figure>\n<p>Change <code class=\"docutils literal notranslate\"><span class=\"pre\">unique=True</span></code> to <code class=\"docutils literal notranslate\"><span class=\"pre\">null=True</span></code> -- this will create the intermediary\nnull field and defer creating the unique constraint until we've populated\nunique values on all the rows.</p>\n</li>\n<li><p>In the first empty migration file, add a\n<a class=\"reference internal\" href=\"/ja/3.0/ref/migration-operations/#django.db.migrations.operations.RunPython\" title=\"django.db.migrations.operations.RunPython\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RunPython</span></code></a> or\n<a class=\"reference internal\" href=\"/ja/3.0/ref/migration-operations/#django.db.migrations.operations.RunSQL\" title=\"django.db.migrations.operations.RunSQL\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RunSQL</span></code></a> operation to generate a\nunique value (UUID in the example) for each existing row. Also add an import\nof <code class=\"docutils literal notranslate\"><span class=\"pre\">uuid</span></code>. For example:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">0005_populate_uuid_values.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"c1\"># Generated by Django A.B on YYYY-MM-DD HH:MM</span>\n<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\">migrations</span>\n<span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">uuid</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">gen_uuid</span><span class=\"p\">(</span><span class=\"n\">apps</span><span class=\"p\">,</span> <span class=\"n\">schema_editor</span><span class=\"p\">):</span>\n    <span class=\"n\">MyModel</span> <span class=\"o\">=</span> <span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">get_model</span><span class=\"p\">(</span><span class=\"s1\">&#39;myapp&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;MyModel&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> <span class=\"n\">row</span> <span class=\"ow\">in</span> <span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">():</span>\n        <span class=\"n\">row</span><span class=\"o\">.</span><span class=\"n\">uuid</span> <span class=\"o\">=</span> <span class=\"n\">uuid</span><span class=\"o\">.</span><span class=\"n\">uuid4</span><span class=\"p\">()</span>\n        <span class=\"n\">row</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">update_fields</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;uuid&#39;</span><span class=\"p\">])</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Migration</span><span class=\"p\">(</span><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">Migration</span><span class=\"p\">):</span>\n\n    <span class=\"n\">dependencies</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"s1\">&#39;myapp&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;0004_add_uuid_field&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n\n    <span class=\"n\">operations</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"c1\"># omit reverse_code=... if you don&#39;t want the migration to be reversible.</span>\n        <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">RunPython</span><span class=\"p\">(</span><span class=\"n\">gen_uuid</span><span class=\"p\">,</span> <span class=\"n\">reverse_code</span><span class=\"o\">=</span><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">RunPython</span><span class=\"o\">.</span><span class=\"n\">noop</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></figure>\n</li>\n<li><p>Now you can apply the migrations as usual with the <a class=\"reference internal\" href=\"/ja/3.0/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a> command.</p>\n<p>Note there is a race condition if you allow objects to be created while this\nmigration is running. Objects created after the <code class=\"docutils literal notranslate\"><span class=\"pre\">AddField</span></code> and before\n<code class=\"docutils literal notranslate\"><span class=\"pre\">RunPython</span></code> will have their original <code class=\"docutils literal notranslate\"><span class=\"pre\">uuid</span></code>’s overwritten.</p>\n</li>\n</ul>\n<section id=\"non-atomic-migrations\">\n<span id=\"id2\"></span><h3>非アトミックのマイグレーション<a class=\"heading-anchor\" href=\"#non-atomic-migrations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>On databases that support DDL transactions (SQLite and PostgreSQL), migrations\nwill run inside a transaction by default. For use cases such as performing data\nmigrations on large tables, you may want to prevent a migration from running in\na transaction by setting the <code class=\"docutils literal notranslate\"><span class=\"pre\">atomic</span></code> attribute to <code class=\"docutils literal notranslate\"><span class=\"pre\">False</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\">migrations</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Migration</span><span class=\"p\">(</span><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">Migration</span><span class=\"p\">):</span>\n    <span class=\"n\">atomic</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n</code></pre></div>\n<p>Within such a migration, all operations are run without a transaction. It's\npossible to execute parts of the migration inside a transaction using\n<a class=\"reference internal\" href=\"/ja/3.0/topics/db/transactions/#django.db.transaction.atomic\" title=\"django.db.transaction.atomic\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">atomic()</span></code></a> or by passing <code class=\"docutils literal notranslate\"><span class=\"pre\">atomic=True</span></code> to\n<code class=\"docutils literal notranslate\"><span class=\"pre\">RunPython</span></code>.</p>\n<p>以下は、小さなバッチで大きなテーブルを更新する非原子データ移行の例です:</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\">import</span><span class=\"w\"> </span><span class=\"nn\">uuid</span>\n\n<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\">migrations</span><span class=\"p\">,</span> <span class=\"n\">transaction</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">gen_uuid</span><span class=\"p\">(</span><span class=\"n\">apps</span><span class=\"p\">,</span> <span class=\"n\">schema_editor</span><span class=\"p\">):</span>\n    <span class=\"n\">MyModel</span> <span class=\"o\">=</span> <span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">get_model</span><span class=\"p\">(</span><span class=\"s1\">&#39;myapp&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;MyModel&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">while</span> <span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">uuid__isnull</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">():</span>\n        <span class=\"k\">with</span> <span class=\"n\">transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span><span class=\"p\">():</span>\n            <span class=\"k\">for</span> <span class=\"n\">row</span> <span class=\"ow\">in</span> <span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">uuid__isnull</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)[:</span><span class=\"mi\">1000</span><span class=\"p\">]:</span>\n                <span class=\"n\">row</span><span class=\"o\">.</span><span class=\"n\">uuid</span> <span class=\"o\">=</span> <span class=\"n\">uuid</span><span class=\"o\">.</span><span class=\"n\">uuid4</span><span class=\"p\">()</span>\n                <span class=\"n\">row</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Migration</span><span class=\"p\">(</span><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">Migration</span><span class=\"p\">):</span>\n    <span class=\"n\">atomic</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n\n    <span class=\"n\">operations</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">RunPython</span><span class=\"p\">(</span><span class=\"n\">gen_uuid</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">atomic</span></code> attribute doesn't have an effect on databases that don't support\nDDL transactions (e.g. MySQL, Oracle). (MySQL's <a class=\"reference external\" href=\"https://dev.mysql.com/doc/refman/en/atomic-ddl.html\">atomic DDL statement support</a> refers to individual\nstatements rather than multiple statements wrapped in a transaction that can be\nrolled back.)</p>\n</section>\n</section>\n<section id=\"controlling-the-order-of-migrations\">\n<h2>マイグレーションの順序をコントロールする<a class=\"heading-anchor\" href=\"#controlling-the-order-of-migrations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Djangoは各移行のファイル名ではなく、<code class=\"docutils literal notranslate\"><span class=\"pre\">Migration</span></code> クラスの2つのプロパティ、<code class=\"docutils literal notranslate\"><span class=\"pre\">dependencies</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">run_before</span></code> を使用してグラフを作成することで、移行を適用する順序を決定します。</p>\n<p><a class=\"reference internal\" href=\"/ja/3.0/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemigrations</span></code></a> コマンドを使用した場合、自動作成された移行では作成プロセスの一部としてこれが定義されているため、おそらく <code class=\"docutils literal notranslate\"><span class=\"pre\">dependencies</span></code> が動作しているのを既に見ているでしょう。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">dependencies</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\">migrations</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Migration</span><span class=\"p\">(</span><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">Migration</span><span class=\"p\">):</span>\n\n    <span class=\"n\">dependencies</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"s1\">&#39;myapp&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;0123_the_previous_migration&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>Usually this will be enough, but from time to time you may need to\nensure that your migration runs <em>before</em> other migrations. This is\nuseful, for example, to make third-party apps' migrations run <em>after</em>\nyour <a class=\"reference internal\" href=\"/ja/3.0/ref/settings/#std-setting-AUTH_USER_MODEL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">AUTH_USER_MODEL</span></code></a> replacement.</p>\n<p>これを達成するために、あなたの <code class=\"docutils literal notranslate\"><span class=\"pre\">Migration</span></code> クラスの <code class=\"docutils literal notranslate\"><span class=\"pre\">run_before</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\">Migration</span><span class=\"p\">(</span><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">Migration</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n    <span class=\"n\">run_before</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"s1\">&#39;third_party_app&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;0001_do_awesome&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>Prefer using <code class=\"docutils literal notranslate\"><span class=\"pre\">dependencies</span></code> over <code class=\"docutils literal notranslate\"><span class=\"pre\">run_before</span></code> when possible. You should\nonly use <code class=\"docutils literal notranslate\"><span class=\"pre\">run_before</span></code> if it is undesirable or impractical to specify\n<code class=\"docutils literal notranslate\"><span class=\"pre\">dependencies</span></code> in the migration which you want to run after the one you are\nwriting.</p>\n</section>\n<section id=\"migrating-data-between-third-party-apps\">\n<h2>サードパーティのアプリ間でデータをマイグレーションする<a class=\"heading-anchor\" href=\"#migrating-data-between-third-party-apps\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>データの移行を使用して、あるサードパーティアプリケーションから別のアプリケーションにデータを移動できます。</p>\n<p>If you plan to remove the old app later, you'll need to set the <code class=\"docutils literal notranslate\"><span class=\"pre\">dependencies</span></code>\nproperty based on whether or not the old app is installed. Otherwise, you'll\nhave missing dependencies once you uninstall the old app. Similarly, you'll\nneed to catch <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#LookupError\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">LookupError</span></code></a> in the <code class=\"docutils literal notranslate\"><span class=\"pre\">apps.get_model()</span></code> call that\nretrieves models from the old app. This approach allows you to deploy your\nproject anywhere without first installing and then uninstalling the old app.</p>\n<p>簡単な移行例を見てみましょう:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">myapp/migrations/0124_move_old_app_to_new_app.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">apps</span> <span class=\"k\">as</span> <span class=\"n\">global_apps</span>\n<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\">migrations</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">forwards</span><span class=\"p\">(</span><span class=\"n\">apps</span><span class=\"p\">,</span> <span class=\"n\">schema_editor</span><span class=\"p\">):</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">OldModel</span> <span class=\"o\">=</span> <span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">get_model</span><span class=\"p\">(</span><span class=\"s1\">&#39;old_app&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;OldModel&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"ne\">LookupError</span><span class=\"p\">:</span>\n        <span class=\"c1\"># The old app isn&#39;t installed.</span>\n        <span class=\"k\">return</span>\n\n    <span class=\"n\">NewModel</span> <span class=\"o\">=</span> <span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">get_model</span><span class=\"p\">(</span><span class=\"s1\">&#39;new_app&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;NewModel&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">NewModel</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">bulk_create</span><span class=\"p\">(</span>\n        <span class=\"n\">NewModel</span><span class=\"p\">(</span><span class=\"n\">new_attribute</span><span class=\"o\">=</span><span class=\"n\">old_object</span><span class=\"o\">.</span><span class=\"n\">old_attribute</span><span class=\"p\">)</span>\n        <span class=\"k\">for</span> <span class=\"n\">old_object</span> <span class=\"ow\">in</span> <span class=\"n\">OldModel</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n    <span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Migration</span><span class=\"p\">(</span><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">Migration</span><span class=\"p\">):</span>\n    <span class=\"n\">operations</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">RunPython</span><span class=\"p\">(</span><span class=\"n\">forwards</span><span class=\"p\">,</span> <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">RunPython</span><span class=\"o\">.</span><span class=\"n\">noop</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n    <span class=\"n\">dependencies</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"s1\">&#39;myapp&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;0123_the_previous_migration&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"s1\">&#39;new_app&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;0001_initial&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">global_apps</span><span class=\"o\">.</span><span class=\"n\">is_installed</span><span class=\"p\">(</span><span class=\"s1\">&#39;old_app&#39;</span><span class=\"p\">):</span>\n        <span class=\"n\">dependencies</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">((</span><span class=\"s1\">&#39;old_app&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;0001_initial&#39;</span><span class=\"p\">))</span>\n</code></pre></figure>\n<p>また、移行が適用されていない場合に何をしたいかを検討します。（上記の例のように）何もしないか、新しいアプリケーションからデータの一部またはすべてを削除することができます。 それに応じて <a class=\"reference internal\" href=\"/ja/3.0/ref/migration-operations/#django.db.migrations.operations.RunPython\" title=\"django.db.migrations.operations.RunPython\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">RunPython</span></code></a> 操作の2番目の引数を調整します。</p>\n</section>\n<section id=\"changing-a-manytomanyfield-to-use-a-through-model\">\n<span id=\"id3\"></span><h2>Changing a <code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code> to use a <code class=\"docutils literal notranslate\"><span class=\"pre\">through</span></code> model<a class=\"heading-anchor\" href=\"#changing-a-manytomanyfield-to-use-a-through-model\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>If you change a <a class=\"reference internal\" href=\"/ja/3.0/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> to use a <code class=\"docutils literal notranslate\"><span class=\"pre\">through</span></code>\nmodel, the default migration will delete the existing table and create a new\none, losing the existing relations. To avoid this, you can use\n<a class=\"reference internal\" href=\"/ja/3.0/ref/migration-operations/#django.db.migrations.operations.SeparateDatabaseAndState\" title=\"django.db.migrations.operations.SeparateDatabaseAndState\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SeparateDatabaseAndState</span></code></a> to rename the existing table to the new\ntable name whilst telling the migration autodetector that the new model has\nbeen created. You can check the existing table name through\n<a class=\"reference internal\" href=\"/ja/3.0/ref/django-admin/#django-admin-sqlmigrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">sqlmigrate</span></code></a> or <a class=\"reference internal\" href=\"/ja/3.0/ref/django-admin/#django-admin-dbshell\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">dbshell</span></code></a>. You can check the new table name\nwith the through model's <code class=\"docutils literal notranslate\"><span class=\"pre\">_meta.db_table</span></code> property. Your new <code class=\"docutils literal notranslate\"><span class=\"pre\">through</span></code>\nmodel should use the same names for the <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code>s as Django did. Also if\nit needs any extra fields, they should be added in operations after\n<a class=\"reference internal\" href=\"/ja/3.0/ref/migration-operations/#django.db.migrations.operations.SeparateDatabaseAndState\" title=\"django.db.migrations.operations.SeparateDatabaseAndState\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SeparateDatabaseAndState</span></code></a>.</p>\n<p>For example, if we had a <code class=\"docutils literal notranslate\"><span class=\"pre\">Book</span></code> model with a <code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code> linking to\n<code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></code>, we could add a through model <code class=\"docutils literal notranslate\"><span class=\"pre\">AuthorBook</span></code> with a new field\n<code class=\"docutils literal notranslate\"><span class=\"pre\">is_primary</span></code>, like so:</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\">migrations</span><span class=\"p\">,</span> <span class=\"n\">models</span>\n<span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">django.db.models.deletion</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Migration</span><span class=\"p\">(</span><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">Migration</span><span class=\"p\">):</span>\n    <span class=\"n\">dependencies</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"s1\">&#39;core&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;0001_initial&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n\n    <span class=\"n\">operations</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">SeparateDatabaseAndState</span><span class=\"p\">(</span>\n            <span class=\"n\">database_operations</span><span class=\"o\">=</span><span class=\"p\">[</span>\n                <span class=\"c1\"># Old table name from checking with sqlmigrate, new table</span>\n                <span class=\"c1\"># name from AuthorBook._meta.db_table.</span>\n                <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">RunSQL</span><span class=\"p\">(</span>\n                    <span class=\"n\">sql</span><span class=\"o\">=</span><span class=\"s1\">&#39;ALTER TABLE core_book_authors RENAME TO core_authorbook&#39;</span><span class=\"p\">,</span>\n                    <span class=\"n\">reverse_sql</span><span class=\"o\">=</span><span class=\"s1\">&#39;ALTER TABLE core_authorbook RENAME TO core_book_authors&#39;</span><span class=\"p\">,</span>\n                <span class=\"p\">),</span>\n            <span class=\"p\">],</span>\n            <span class=\"n\">state_operations</span><span class=\"o\">=</span><span class=\"p\">[</span>\n                <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">CreateModel</span><span class=\"p\">(</span>\n                    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;AuthorBook&#39;</span><span class=\"p\">,</span>\n                    <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">[</span>\n                        <span class=\"p\">(</span>\n                            <span class=\"s1\">&#39;id&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">AutoField</span><span class=\"p\">(</span>\n                                <span class=\"n\">auto_created</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                <span class=\"n\">primary_key</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                <span class=\"n\">serialize</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n                                <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;ID&#39;</span><span class=\"p\">,</span>\n                            <span class=\"p\">),</span>\n                        <span class=\"p\">),</span>\n                        <span class=\"p\">(</span>\n                            <span class=\"s1\">&#39;author&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n                                <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">django</span><span class=\"o\">.</span><span class=\"n\">db</span><span class=\"o\">.</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">deletion</span><span class=\"o\">.</span><span class=\"n\">DO_NOTHING</span><span class=\"p\">,</span>\n                                <span class=\"n\">to</span><span class=\"o\">=</span><span class=\"s1\">&#39;core.Author&#39;</span><span class=\"p\">,</span>\n                            <span class=\"p\">),</span>\n                        <span class=\"p\">),</span>\n                        <span class=\"p\">(</span>\n                            <span class=\"s1\">&#39;book&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n                                <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">django</span><span class=\"o\">.</span><span class=\"n\">db</span><span class=\"o\">.</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">deletion</span><span class=\"o\">.</span><span class=\"n\">DO_NOTHING</span><span class=\"p\">,</span>\n                                <span class=\"n\">to</span><span class=\"o\">=</span><span class=\"s1\">&#39;core.Book&#39;</span><span class=\"p\">,</span>\n                            <span class=\"p\">),</span>\n                        <span class=\"p\">),</span>\n                    <span class=\"p\">],</span>\n                <span class=\"p\">),</span>\n                <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">AlterField</span><span class=\"p\">(</span>\n                    <span class=\"n\">model_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;book&#39;</span><span class=\"p\">,</span>\n                    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;authors&#39;</span><span class=\"p\">,</span>\n                    <span class=\"n\">field</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span>\n                        <span class=\"n\">to</span><span class=\"o\">=</span><span class=\"s1\">&#39;core.Author&#39;</span><span class=\"p\">,</span>\n                        <span class=\"n\">through</span><span class=\"o\">=</span><span class=\"s1\">&#39;core.AuthorBook&#39;</span><span class=\"p\">,</span>\n                    <span class=\"p\">),</span>\n                <span class=\"p\">),</span>\n            <span class=\"p\">],</span>\n        <span class=\"p\">),</span>\n        <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">AddField</span><span class=\"p\">(</span>\n            <span class=\"n\">model_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;authorbook&#39;</span><span class=\"p\">,</span>\n            <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;is_primary&#39;</span><span class=\"p\">,</span>\n            <span class=\"n\">field</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">),</span>\n        <span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n</section>\n<section id=\"changing-an-unmanaged-model-to-managed\">\n<h2>未管理状態のモデルを管理状態に変更する<a class=\"heading-anchor\" href=\"#changing-an-unmanaged-model-to-managed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>If you want to change an unmanaged model (<a class=\"reference internal\" href=\"/ja/3.0/ref/models/options/#django.db.models.Options.managed\" title=\"django.db.models.Options.managed\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">managed=False</span></code></a>) to managed, you must remove\n<code class=\"docutils literal notranslate\"><span class=\"pre\">managed=False</span></code> and generate a migration before making other schema-related\nchanges to the model, since schema changes that appear in the migration that\ncontains the operation to change <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta.managed</span></code> may not be applied.</p>\n</section>","rootId":"writing-database-migrations","toc":[{"title":"データのマイグレーションと複数のデータベース","anchor":"data-migrations-and-multiple-databases","children":[]},{"title":"Migrations that add unique fields","anchor":"migrations-that-add-unique-fields","children":[{"title":"非アトミックのマイグレーション","anchor":"non-atomic-migrations","children":[]}]},{"title":"マイグレーションの順序をコントロールする","anchor":"controlling-the-order-of-migrations","children":[]},{"title":"サードパーティのアプリ間でデータをマイグレーションする","anchor":"migrating-data-between-third-party-apps","children":[]},{"title":"Changing a ManyToManyField to use a through model","anchor":"changing-a-manytomanyfield-to-use-a-through-model","children":[]},{"title":"未管理状態のモデルを管理状態に変更する","anchor":"changing-an-unmanaged-model-to-managed","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"「How-to」ガイド","url":"/ja/3.0/howto/"}],"prev":{"docname":"howto/windows","title":"Windows での Django のインストール方法","url":"/ja/3.0/howto/windows/"},"next":{"docname":"faq/index","title":"Django FAQ よくある質問","url":"/ja/3.0/faq/"},"formats":{"html":"/ja/3.0/howto/writing-migrations/","markdown":"/ja/3.0/howto/writing-migrations.md","json":"/ja/3.0/howto/writing-migrations.json"},"source":"https://github.com/django/django/blob/stable/3.0.x/docs/howto/writing-migrations.txt","official":"https://docs.djangoproject.com/ja/3.0/howto/writing-migrations/","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","pt-br","ko","es","el","pl"]}