{"title":"マイグレーション操作","version":"2.0","locale":"ja","docname":"ref/migration-operations","url":"/ja/2.0/ref/migration-operations/","canonical":"https://djangodocs.dev/ja/2.0/ref/migration-operations/","summary":"マイグレーションファイルは一つ以上のオペレーション、データベースに対してマイグレーションが行うべき操作を宣言的に保持するオブジェクト、から構成されます。","html":"<span id=\"migration-operations\"></span><h1>マイグレーション操作<a class=\"heading-anchor\" href=\"#module-django.db.migrations.operations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>マイグレーションファイルは一つ以上の <code class=\"docutils literal notranslate\">オペレーション</code>、データベースに対してマイグレーションが行うべき操作を宣言的に保持するオブジェクト、から構成されます。</p>\n<p>加えて Django はモデルが過去からどのように変遷したかを解明するため、またマイグレーションを自動的に記述できるように最後のマイグレーション以降モデルに対して行われた変更を導出するために、これらの <code class=\"docutils literal notranslate\">オペレーション</code> オブジェクトを利用します;マイグレーションの定義が宣言的であるのはそのためで、これは Django がプロジェクトの全容がどういった物であるかを解析する際、データベースを直接操作することなく、容易にマイグレーション定義を全てメモリ上にロードして処理できる事を意味します。</p>\n<p><a class=\"reference internal\" href=\"/ja/2.0/topics/migrations/#data-migrations\"><span class=\"std std-ref\">データのマイグレーション</span></a> や高度なデータベースへの手動操作のような特別な <code class=\"docutils literal notranslate\">オペレーション</code> も存在します。もし頻繁に行われる独自の変更をカプセル化したければ独自に <code class=\"docutils literal notranslate\">オペレーション</code> を記述する事もできます。</p>\n<p>もし独自の <code class=\"docutils literal notranslate\">Operation</code> オブジェクトを定義する空のマイグレーションファイルが必要であれば、<code class=\"docutils literal notranslate\">python manage.py makemigrations --empty yourappname</code> を実行するだけですが、手動でのスキーマ変更操作の追加はマイグレーションの自動検出機構の誤動作を招き、<a class=\"reference internal\" href=\"/ja/2.0/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\">makemigrations</code></a> を実行した出力結果が正常な物でなくなる可能性が有る事に十分注意してください。</p>\n<p>Django が提供するコア機能は全て <code class=\"docutils literal notranslate\">django.db.migrations.operations</code> モジュールから利用できます。</p>\n<p>より入門的な内容に関しては、 <a class=\"reference internal\" href=\"/ja/2.0/topics/migrations/\"><span class=\"doc\">トピックスのマイグレーション</span></a> を参照ください。</p>\n<section id=\"schema-operations\">\n<h2>スキーマ操作<a class=\"heading-anchor\" href=\"#schema-operations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"createmodel\">\n<h3><code class=\"docutils literal notranslate\">CreateModel</code><a class=\"heading-anchor\" href=\"#createmodel\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.CreateModel\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">CreateModel</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">fields</em>, <em class=\"sig-param\">options<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">bases<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">managers<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.CreateModel\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>プロジェクトの履歴に新たなモデル、そしてデータベース上に対応するテーブルを作成します。</p>\n<p><code class=\"docutils literal notranslate\">name</code> は <code class=\"docutils literal notranslate\">models.py</code> ファイルに定義されているであろうモデルの名称です。</p>\n<p><code class=\"docutils literal notranslate\">fields</code> は <code class=\"docutils literal notranslate\">(フィールド名, フィールドのインスタンス)</code> という 2 値のタプルのリストです。フィールドのインスタンスは束縛されないフィールド(他のモデルから取得した物でなく、単に <code class=\"docutils literal notranslate\">models.CharField(...)</code> 等と記述する物)でなければいけません。</p>\n<p><code class=\"docutils literal notranslate\">options</code> は定義されるモデルの <code class=\"docutils literal notranslate\">Meta</code> クラスの値からなるオプションの辞書オブジェクトです。</p>\n<p><code class=\"docutils literal notranslate\">bases</code> は定義するモデルが継承する他のクラスのリストです;このリストは定義するモデルが他のモデルに依存する(履歴上のバージョンを継承する)場合、クラスオブジェクトを文字列として <code class=\"docutils literal notranslate\">&quot;appname.ModelName&quot;</code> という形式で含むことができます。このパラメータが空である場合、定義するモデルは標準の <code class=\"docutils literal notranslate\">models.Model</code> からの継承だけというデフォルト設定を利用します。</p>\n<p><code class=\"docutils literal notranslate\">managers</code> は <code class=\"docutils literal notranslate\">(マネージャ名, マネージャのインスタンス)</code> という 2 値のタプルのリストを受け取ります。マイグレーションの間はリスト内で最初に定義されたマネージャがこのモデルの標準マネージャとして利用されます。</p>\n</section>\n<section id=\"deletemodel\">\n<h3><code class=\"docutils literal notranslate\">DeleteModel</code><a class=\"heading-anchor\" href=\"#deletemodel\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.DeleteModel\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">DeleteModel</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.DeleteModel\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>プロジェクトの履歴からモデルを、加えてデータベースから該当モデルを扱うテーブルを削除します。</p>\n</section>\n<section id=\"renamemodel\">\n<h3><code class=\"docutils literal notranslate\">RenameModel</code><a class=\"heading-anchor\" href=\"#renamemodel\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.RenameModel\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RenameModel</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">old_name</em>, <em class=\"sig-param\">new_name</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.RenameModel\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>モデルの名称を今までの名称から新しい名称に変更します。</p>\n<p>一度に定義しているモデルの名前とかなり多くのフィールドの名前を変更した場合は手動でこの処理を追加する必要があるかもしれません;マイグレーションの自動検知機構が古い名称を持ったモデルを削除して異なった名称のモデルを追加したと認識してしまうため、そのマイグレーション処理は古いテーブルの全てのデータを消去してしまいます。</p>\n</section>\n<section id=\"altermodeltable\">\n<h3><code class=\"docutils literal notranslate\">AlterModelTable</code><a class=\"heading-anchor\" href=\"#altermodeltable\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.AlterModelTable\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AlterModelTable</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">table</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AlterModelTable\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>定義しているモデルのテーブル名を変更します(<code class=\"docutils literal notranslate\">Meta</code> サブクラスの <a class=\"reference internal\" href=\"/ja/2.0/ref/models/options/#django.db.models.Options.db_table\" title=\"django.db.models.Options.db_table\"><code class=\"xref py py-attr docutils literal notranslate\">db_table</code></a> オプションを参照します)。</p>\n</section>\n<section id=\"alteruniquetogether\">\n<h3><code class=\"docutils literal notranslate\">AlterUniqueTogether</code><a class=\"heading-anchor\" href=\"#alteruniquetogether\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.AlterUniqueTogether\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AlterUniqueTogether</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">unique_together</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AlterUniqueTogether\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Changes the model's set of unique constraints (the\n<a class=\"reference internal\" href=\"/ja/2.0/ref/models/options/#django.db.models.Options.unique_together\" title=\"django.db.models.Options.unique_together\"><code class=\"xref py py-attr docutils literal notranslate\">unique_together</code></a> option on the <code class=\"docutils literal notranslate\">Meta</code>\nsubclass).</p>\n</section>\n<section id=\"alterindextogether\">\n<h3><code class=\"docutils literal notranslate\">AlterIndexTogether</code><a class=\"heading-anchor\" href=\"#alterindextogether\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.AlterIndexTogether\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AlterIndexTogether</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">index_together</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AlterIndexTogether\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Changes the model's set of custom indexes (the\n<a class=\"reference internal\" href=\"/ja/2.0/ref/models/options/#django.db.models.Options.index_together\" title=\"django.db.models.Options.index_together\"><code class=\"xref py py-attr docutils literal notranslate\">index_together</code></a> option on the <code class=\"docutils literal notranslate\">Meta</code>\nsubclass).</p>\n</section>\n<section id=\"alterorderwithrespectto\">\n<h3><code class=\"docutils literal notranslate\">AlterOrderWithRespectTo</code><a class=\"heading-anchor\" href=\"#alterorderwithrespectto\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.AlterOrderWithRespectTo\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AlterOrderWithRespectTo</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">order_with_respect_to</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AlterOrderWithRespectTo\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Makes or deletes the <code class=\"docutils literal notranslate\">_order</code> column needed for the\n<a class=\"reference internal\" href=\"/ja/2.0/ref/models/options/#django.db.models.Options.order_with_respect_to\" title=\"django.db.models.Options.order_with_respect_to\"><code class=\"xref py py-attr docutils literal notranslate\">order_with_respect_to</code></a> option on the <code class=\"docutils literal notranslate\">Meta</code>\nsubclass.</p>\n</section>\n<section id=\"altermodeloptions\">\n<h3><code class=\"docutils literal notranslate\">AlterModelOptions</code><a class=\"heading-anchor\" href=\"#altermodeloptions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.AlterModelOptions\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AlterModelOptions</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">options</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AlterModelOptions\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Stores changes to miscellaneous model options (settings on a model's <code class=\"docutils literal notranslate\">Meta</code>)\nlike <code class=\"docutils literal notranslate\">permissions</code> and <code class=\"docutils literal notranslate\">verbose_name</code>. Does not affect the database, but\npersists these changes for <a class=\"reference internal\" href=\"#django.db.migrations.operations.RunPython\" title=\"django.db.migrations.operations.RunPython\"><code class=\"xref py py-class docutils literal notranslate\">RunPython</code></a> instances to use. <code class=\"docutils literal notranslate\">options</code>\nshould be a dictionary mapping option names to values.</p>\n</section>\n<section id=\"altermodelmanagers\">\n<h3><code class=\"docutils literal notranslate\">AlterModelManagers</code><a class=\"heading-anchor\" href=\"#altermodelmanagers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.AlterModelManagers\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AlterModelManagers</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">managers</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AlterModelManagers\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Alters the managers that are available during migrations.</p>\n</section>\n<section id=\"addfield\">\n<h3><code class=\"docutils literal notranslate\">AddField</code><a class=\"heading-anchor\" href=\"#addfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.AddField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AddField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_name</em>, <em class=\"sig-param\">name</em>, <em class=\"sig-param\">field</em>, <em class=\"sig-param\">preserve_default<span class=\"o\">=</span><span class=\"default_value\">True</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AddField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Adds a field to a model. <code class=\"docutils literal notranslate\">model_name</code> is the model's name, <code class=\"docutils literal notranslate\">name</code> is\nthe field's name, and <code class=\"docutils literal notranslate\">field</code> is an unbound Field instance (the thing\nyou would put in the field declaration in <code class=\"docutils literal notranslate\">models.py</code> - for example,\n<code class=\"docutils literal notranslate\">models.IntegerField(null=True)</code>.</p>\n<p>The <code class=\"docutils literal notranslate\">preserve_default</code> argument indicates whether the field's default\nvalue is permanent and should be baked into the project state (<code class=\"docutils literal notranslate\">True</code>),\nor if it is temporary and just for this migration (<code class=\"docutils literal notranslate\">False</code>) - usually\nbecause the migration is adding a non-nullable field to a table and needs\na default value to put into existing rows. It does not affect the behavior\nof setting defaults in the database directly - Django never sets database\ndefaults and always applies them in the Django ORM code.</p>\n</section>\n<section id=\"removefield\">\n<h3><code class=\"docutils literal notranslate\">RemoveField</code><a class=\"heading-anchor\" href=\"#removefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.RemoveField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RemoveField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_name</em>, <em class=\"sig-param\">name</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.RemoveField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Removes a field from a model.</p>\n<p>Bear in mind that when reversed, this is actually adding a field to a model.\nThe operation is reversible (apart from any data loss, which of course is\nirreversible) if the field is nullable or if it has a default value that can be\nused to populate the recreated column. If the field is not nullable and does\nnot have a default value, the operation is irreversible.</p>\n</section>\n<section id=\"alterfield\">\n<h3><code class=\"docutils literal notranslate\">AlterField</code><a class=\"heading-anchor\" href=\"#alterfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.AlterField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AlterField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_name</em>, <em class=\"sig-param\">name</em>, <em class=\"sig-param\">field</em>, <em class=\"sig-param\">preserve_default<span class=\"o\">=</span><span class=\"default_value\">True</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AlterField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Alters a field's definition, including changes to its type,\n<a class=\"reference internal\" href=\"/ja/2.0/ref/models/fields/#django.db.models.Field.null\" title=\"django.db.models.Field.null\"><code class=\"xref py py-attr docutils literal notranslate\">null</code></a>, <a class=\"reference internal\" href=\"/ja/2.0/ref/models/fields/#django.db.models.Field.unique\" title=\"django.db.models.Field.unique\"><code class=\"xref py py-attr docutils literal notranslate\">unique</code></a>,\n<a class=\"reference internal\" href=\"/ja/2.0/ref/models/fields/#django.db.models.Field.db_column\" title=\"django.db.models.Field.db_column\"><code class=\"xref py py-attr docutils literal notranslate\">db_column</code></a> and other field attributes.</p>\n<p>The <code class=\"docutils literal notranslate\">preserve_default</code> argument indicates whether the field's default\nvalue is permanent and should be baked into the project state (<code class=\"docutils literal notranslate\">True</code>),\nor if it is temporary and just for this migration (<code class=\"docutils literal notranslate\">False</code>) - usually\nbecause the migration is altering a nullable field to a non-nullable one and\nneeds a default value to put into existing rows. It does not affect the\nbehavior of setting defaults in the database directly - Django never sets\ndatabase defaults and always applies them in the Django ORM code.</p>\n<p>Note that not all changes are possible on all databases - for example, you\ncannot change a text-type field like <code class=\"docutils literal notranslate\">models.TextField()</code> into a number-type\nfield like <code class=\"docutils literal notranslate\">models.IntegerField()</code> on most databases.</p>\n</section>\n<section id=\"renamefield\">\n<h3><code class=\"docutils literal notranslate\">RenameField</code><a class=\"heading-anchor\" href=\"#renamefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.RenameField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RenameField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_name</em>, <em class=\"sig-param\">old_name</em>, <em class=\"sig-param\">new_name</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.RenameField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Changes a field's name (and, unless <a class=\"reference internal\" href=\"/ja/2.0/ref/models/fields/#django.db.models.Field.db_column\" title=\"django.db.models.Field.db_column\"><code class=\"xref py py-attr docutils literal notranslate\">db_column</code></a>\nis set, its column name).</p>\n</section>\n<section id=\"addindex\">\n<h3><code class=\"docutils literal notranslate\">AddIndex</code><a class=\"heading-anchor\" href=\"#addindex\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.AddIndex\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AddIndex</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_name</em>, <em class=\"sig-param\">index</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AddIndex\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<aside class=\"version-note version-added\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">New in Django 1.11</p></aside>\n<p>Creates an index in the database table for the model with <code class=\"docutils literal notranslate\">model_name</code>.\n<code class=\"docutils literal notranslate\">index</code> is an instance of the <a class=\"reference internal\" href=\"/ja/2.0/ref/models/indexes/#django.db.models.Index\" title=\"django.db.models.Index\"><code class=\"xref py py-class docutils literal notranslate\">Index</code></a> class.</p>\n</section>\n<section id=\"removeindex\">\n<h3><code class=\"docutils literal notranslate\">RemoveIndex</code><a class=\"heading-anchor\" href=\"#removeindex\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.RemoveIndex\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RemoveIndex</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_name</em>, <em class=\"sig-param\">name</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.RemoveIndex\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<aside class=\"version-note version-added\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">New in Django 1.11</p></aside>\n<p>Removes the index named <code class=\"docutils literal notranslate\">name</code> from the model with <code class=\"docutils literal notranslate\">model_name</code>.</p>\n</section>\n</section>\n<section id=\"special-operations\">\n<h2>特別な操作<a class=\"heading-anchor\" href=\"#special-operations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"runsql\">\n<h3><code class=\"docutils literal notranslate\">RunSQL</code><a class=\"heading-anchor\" href=\"#runsql\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.RunSQL\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RunSQL</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">sql</em>, <em class=\"sig-param\">reverse_sql<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">state_operations<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">hints<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">elidable<span class=\"o\">=</span><span class=\"default_value\">False</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.RunSQL\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>データベース上で任意の SQL を実行させる事ができます - データベースバックエンドで Django が直接サポートしていない先進機能、例えば部分インデックス等、を利用する上で有用です。</p>\n<p><code class=\"docutils literal notranslate\">sql</code> および、与えられれば <code class=\"docutils literal notranslate\">reverse_sql</code> もデータベース上で実行するための SQL 文字列である必要が有ります。多くの(PostgreSQL を除いた)データベースバックエンドにおいて、Django は与えられた SQL を実行前に独立した句で分割します。この処理は Python の <a class=\"reference external\" href=\"https://pypi.org/project/sqlparse/\">sqlparse</a> ライブラリを必要とします。</p>\n<p>文字列もしくは 2 値のタプルのリストを渡すことができます。その内後者はクエリとパラメータを <a class=\"reference internal\" href=\"/ja/2.0/topics/db/sql/#executing-custom-sql\"><span class=\"std std-ref\">cursor.execute()</span></a> において行うのと同じ形式で渡すために用いられます。以下の 3 つの処理は互いに等価です:</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>migrations<span class=\"o\">.</span>RunSQL<span class=\"p\">(</span><span class=\"s2\">&quot;INSERT INTO musician (name) VALUES (&#39;Reinhardt&#39;);&quot;</span><span class=\"p\">)</span>\nmigrations<span class=\"o\">.</span>RunSQL<span class=\"p\">([(</span><span class=\"s2\">&quot;INSERT INTO musician (name) VALUES (&#39;Reinhardt&#39;);&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)])</span>\nmigrations<span class=\"o\">.</span>RunSQL<span class=\"p\">([(</span><span class=\"s2\">&quot;INSERT INTO musician (name) VALUES (</span><span class=\"si\">%s</span><span class=\"s2\">);&quot;</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"s1\">&#39;Reinhardt&#39;</span><span class=\"p\">])])</span>\n</code></pre></div>\n<p>クエリにパーセント文字リテラルを含ませたい場合、パラメータを渡していればパーセント文字を二重に記述する必要が有ります。</p>\n<p><code class=\"docutils literal notranslate\">reverse_sql</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>migrations<span class=\"o\">.</span>RunSQL<span class=\"p\">(</span>\n    <span class=\"p\">[(</span><span class=\"s2\">&quot;INSERT INTO musician (name) VALUES (</span><span class=\"si\">%s</span><span class=\"s2\">);&quot;</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"s1\">&#39;Reinhardt&#39;</span><span class=\"p\">])],</span>\n    <span class=\"p\">[(</span><span class=\"s2\">&quot;DELETE FROM musician where name=</span><span class=\"si\">%s</span><span class=\"s2\">;&quot;</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"s1\">&#39;Reinhardt&#39;</span><span class=\"p\">])],</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>引数 <code class=\"docutils literal notranslate\">state_operations</code> にはプロジェクトのステートから見た SQL と等価となる処理を渡すことができます;例えば、手動でカラムを作成した場合、マイグレーションの自動検知機構が最新のモデルのステートを保持できるように <code class=\"docutils literal notranslate\">AddField</code> のリストを渡す必要が有ります(そうしなければ、次に <code class=\"docutils literal notranslate\">makemigrations</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>migrations<span class=\"o\">.</span>RunSQL<span class=\"p\">(</span>\n    <span class=\"s2\">&quot;ALTER TABLE musician ADD COLUMN name varchar(255) NOT NULL;&quot;</span><span class=\"p\">,</span>\n    state_operations<span class=\"o\">=</span><span class=\"p\">[</span>\n        migrations<span class=\"o\">.</span>AddField<span class=\"p\">(</span>\n            <span class=\"s1\">&#39;musician&#39;</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span>\n            models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">255</span><span class=\"p\">),</span>\n        <span class=\"p\">),</span>\n    <span class=\"p\">],</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>オプションの <code class=\"docutils literal notranslate\">hints</code> 引数はデータベースルータオブジェクトの <a class=\"reference internal\" href=\"/ja/2.0/topics/db/multi-db/#allow_migrate\" title=\"allow_migrate\"><code class=\"xref py py-meth docutils literal notranslate\">allow_migrate()</code></a> メソッドに <code class=\"docutils literal notranslate\">**hints</code> として渡されてルーティングの決定を補助します。データベースのヒントに関しての詳細は <a class=\"reference internal\" href=\"/ja/2.0/topics/db/multi-db/#topics-db-multi-db-hints\"><span class=\"std std-ref\">Hints</span></a> を参照ください。</p>\n<p>オプションの <code class=\"docutils literal notranslate\">elidable</code> 引数はこの処理を <a class=\"reference internal\" href=\"/ja/2.0/topics/migrations/#migration-squashing\"><span class=\"std std-ref\">マイグレーションの統合</span></a> を行った際に消去する(省略する)か否かを決定します。</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.RunSQL.noop\">\n<span class=\"sig-prename descclassname\">RunSQL.</span><span class=\"sig-name descname\">noop</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.RunSQL.noop\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>指定された順序での処理を行わない場合、<code class=\"docutils literal notranslate\">sql</code> もしくは <code class=\"docutils literal notranslate\">reverse_sql</code> に対して <code class=\"docutils literal notranslate\">RunSQL.noop</code> 要素を渡します。これは特に処理を逆の順序で行いたい場合に有用です。</p>\n</dd></dl>\n\n</section>\n<section id=\"runpython\">\n<h3><code class=\"docutils literal notranslate\">RunPython</code><a class=\"heading-anchor\" href=\"#runpython\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.RunPython\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RunPython</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">code</em>, <em class=\"sig-param\">reverse_code<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">atomic<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">hints<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">elidable<span class=\"o\">=</span><span class=\"default_value\">False</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.RunPython\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>マイグレーション履歴を反映して独自の Python コードを実行します。<code class=\"docutils literal notranslate\">code</code> (与えられれば加えて <code class=\"docutils literal notranslate\">reverse_code</code> )は二つの引数を受け取る呼び出し可能オブジェクトでなければなりません;第一引数はプロジェクトの履歴において処理の場所が一致している履歴を反映したモデルを含んだ <code class=\"docutils literal notranslate\">django.apps.registry.Apps</code> のインスタンスであり、第二引数は <a class=\"reference internal\" href=\"/ja/2.0/ref/schema-editor/#django.db.backends.base.schema.BaseDatabaseSchemaEditor\" title=\"django.db.backends.base.schema.BaseDatabaseSchemaEditor\"><code class=\"xref py py-class docutils literal notranslate\">SchemaEditor</code></a> のインスタンスです。</p>\n<p><code class=\"docutils literal notranslate\">reverse_code</code> 引数はマイグレーションが非適用となった際に呼び出されます。この呼び出し可能オブジェクトはマイグレーションが逆順処理可能となるよう、先の呼び出し可能オブジェクト <code class=\"docutils literal notranslate\">code</code> で行われた処理を無効化しなければなりません。</p>\n<p>オプションの <code class=\"docutils literal notranslate\">hints</code> 引数はルーティングの決定を補助するためにデータベースルータの <a class=\"reference internal\" href=\"/ja/2.0/topics/db/multi-db/#allow_migrate\" title=\"allow_migrate\"><code class=\"xref py py-meth docutils literal notranslate\">allow_migrate()</code></a> メソッドに <code class=\"docutils literal notranslate\">**hints</code> として渡されます。データベースのヒントに関しての詳細は <a class=\"reference internal\" href=\"/ja/2.0/topics/db/multi-db/#topics-db-multi-db-hints\"><span class=\"std std-ref\">Hints</span></a> を参照してください。</p>\n<p>オプションの <code class=\"docutils literal notranslate\">elidable</code> 引数はこの処理を <a class=\"reference internal\" href=\"/ja/2.0/topics/migrations/#migration-squashing\"><span class=\"std std-ref\">マイグレーションの統合</span></a> を行った際に消去する(省略する)か否かを決定します。</p>\n<p>上記マイグレーションファイル内の <code class=\"docutils literal notranslate\">Migration</code> クラスにおいてコードが分割された関数として記述され、単に <code class=\"docutils literal notranslate\">RunPython</code> に渡すだけで良い状態にすることが推奨されます。以下に <code class=\"docutils literal notranslate\">RunPython</code> を用いて <code class=\"docutils literal notranslate\">Country</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=\"nn\">django.db</span> <span class=\"kn\">import</span> migrations\n\n<span class=\"k\">def</span> <span class=\"nf\">forwards_func</span><span class=\"p\">(</span>apps<span class=\"p\">,</span> schema_editor<span class=\"p\">):</span>\n    <span class=\"c1\"># We get the model from the versioned app registry;</span>\n    <span class=\"c1\"># if we directly import it, it&#39;ll be the wrong version</span>\n    Country <span class=\"o\">=</span> apps<span class=\"o\">.</span>get_model<span class=\"p\">(</span><span class=\"s2\">&quot;myapp&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Country&quot;</span><span class=\"p\">)</span>\n    db_alias <span class=\"o\">=</span> schema_editor<span class=\"o\">.</span>connection<span class=\"o\">.</span>alias\n    Country<span class=\"o\">.</span>objects<span class=\"o\">.</span>using<span class=\"p\">(</span>db_alias<span class=\"p\">)</span><span class=\"o\">.</span>bulk_create<span class=\"p\">([</span>\n        Country<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;USA&quot;</span><span class=\"p\">,</span> code<span class=\"o\">=</span><span class=\"s2\">&quot;us&quot;</span><span class=\"p\">),</span>\n        Country<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;France&quot;</span><span class=\"p\">,</span> code<span class=\"o\">=</span><span class=\"s2\">&quot;fr&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">])</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">reverse_func</span><span class=\"p\">(</span>apps<span class=\"p\">,</span> schema_editor<span class=\"p\">):</span>\n    <span class=\"c1\"># forwards_func() creates two Country instances,</span>\n    <span class=\"c1\"># so reverse_func() should delete them.</span>\n    Country <span class=\"o\">=</span> apps<span class=\"o\">.</span>get_model<span class=\"p\">(</span><span class=\"s2\">&quot;myapp&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Country&quot;</span><span class=\"p\">)</span>\n    db_alias <span class=\"o\">=</span> schema_editor<span class=\"o\">.</span>connection<span class=\"o\">.</span>alias\n    Country<span class=\"o\">.</span>objects<span class=\"o\">.</span>using<span class=\"p\">(</span>db_alias<span class=\"p\">)</span><span class=\"o\">.</span>filter<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;USA&quot;</span><span class=\"p\">,</span> code<span class=\"o\">=</span><span class=\"s2\">&quot;us&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span>delete<span class=\"p\">()</span>\n    Country<span class=\"o\">.</span>objects<span class=\"o\">.</span>using<span class=\"p\">(</span>db_alias<span class=\"p\">)</span><span class=\"o\">.</span>filter<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;France&quot;</span><span class=\"p\">,</span> code<span class=\"o\">=</span><span class=\"s2\">&quot;fr&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span>delete<span class=\"p\">()</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">Migration</span><span class=\"p\">(</span>migrations<span class=\"o\">.</span>Migration<span class=\"p\">):</span>\n\n    dependencies <span class=\"o\">=</span> <span class=\"p\">[]</span>\n\n    operations <span class=\"o\">=</span> <span class=\"p\">[</span>\n        migrations<span class=\"o\">.</span>RunPython<span class=\"p\">(</span>forwards_func<span class=\"p\">,</span> reverse_func<span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>これは <a class=\"reference internal\" href=\"/ja/2.0/topics/migrations/#data-migrations\"><span class=\"std std-ref\">データのマイグレーション</span></a> の作成、独自のデータ更新と構成変更、そして ORM や Python のコードにアクセスを必要とするあらゆる操作のために行われる一般的な操作です。</p>\n<p>もし South マイグレーションツールから移行した場合、これは基本的に処理として South の方式を用いています - 即ち順序通りおよび逆順のマイグレーションに対して 1 つもしくは 2 つのメソッドを用い、ORM とスキーマの操作が可能になるという方式です。多くの場合、South による <code class=\"docutils literal notranslate\">orm.Model</code> もしくは <code class=\"docutils literal notranslate\">orm[&quot;appname&quot;, &quot;Model&quot;]</code> に対する参照は、本マイグレーションツールによる <code class=\"docutils literal notranslate\">apps.get_model(&quot;appname&quot;, &quot;Model&quot;)</code> に対する参照に直接置き換えて考える事ができ、残りのコードの大半はデータのマイグレーションに際して変更が不要です。しかしながら、他のアプリケーション内のマイグレーションが本アプリケーションの依存関係に組み込まれない限り <code class=\"docutils literal notranslate\">apps</code> は本アプリケーション内のモデルへの参照のみを持ちます。</p>\n<p><a class=\"reference internal\" href=\"#django.db.migrations.operations.RunSQL\" title=\"django.db.migrations.operations.RunSQL\"><code class=\"xref py py-class docutils literal notranslate\">RunSQL</code></a> と同様、もし内部のスキーマを変更する場合は Django のモデル機構のスコープ範囲外(例えば triggers 等)で行うか、もしくはモデルの状態に変更を反映する処理に <a class=\"reference internal\" href=\"#django.db.migrations.operations.SeparateDatabaseAndState\" title=\"django.db.migrations.operations.SeparateDatabaseAndState\"><code class=\"xref py py-class docutils literal notranslate\">SeparateDatabaseAndState</code></a> を追加する事を心がけてください - そうでなければ、バージョン管理された ORM およびマイグレーションの自動検出機構が正常に動作しなくなります。</p>\n<p>標準では <code class=\"docutils literal notranslate\">RunPython</code> は DDL トランザクションをサポートしないデータベース(例えば MySQL と Oracle 等)上では通常のトランザクション内で記述された内容の処理を行います。この仕組みは安全ではありますが、これらのデータベースバックエンドを利用中に <code class=\"docutils literal notranslate\">schema_editor</code> を利用しようとするとクラッシュを引き起こす場合が有ります;このような場合は、<code class=\"docutils literal notranslate\">RunPython</code> に対して <code class=\"docutils literal notranslate\">atomic=False</code> を渡してください。</p>\n<p>トランザクション中の DDL 使用をサポートしているデータベース(SQLite や PostgreSQL)においては、<code class=\"docutils literal notranslate\">RunPython</code> は各マイグレーションに対して作成されたトランザクション以外に自動的にトランザクションを保持しません。そのため、例えば PostgreSQL では、スキーマ変更と <code class=\"docutils literal notranslate\">RunPython</code> を同一のマイグレーション内で結合させて用いるのは避けるべきであり、そうしなければ <code class=\"docutils literal notranslate\">OperationalError: cannot ALTER TABLE &quot;mytable&quot; because it has pending trigger events</code> のようなエラーに遭遇する可能性が有ります。</p>\n<p>もしここまでに挙げられた物と異なるデータベースを利用しておりトランザクション中の DDL 事項をサポートしているか不明な場合、 <code class=\"docutils literal notranslate\">django.db.connection.features.can_rollback_ddl</code> 属性を確認してください。</p>\n<p>もし <code class=\"docutils literal notranslate\">RunPython</code> 操作が <a class=\"reference internal\" href=\"/ja/2.0/howto/writing-migrations/#non-atomic-migrations\"><span class=\"std std-ref\">非アトミックなマイグレーション</span></a> の一部である場合、その操作は <code class=\"docutils literal notranslate\">RunPython</code> 操作に対して <code class=\"docutils literal notranslate\">atomic=True</code> が渡されて生成されたトランザクション中においてのみ実行されます。</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p><code class=\"docutils literal notranslate\">RunPython</code> はモデルのデータベース接続を魔法のように切り替える事はしません;データベースのエイリアス(作成した関数の第二引数 <code class=\"docutils literal notranslate\">schema_editor</code> 内、 <code class=\"docutils literal notranslate\">schema_editor.connection.alias</code> から利用可能)を指定していないモデルのメソッドはすべてデフォルトのデータベースを利用します。</p>\n</aside>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.RunPython.noop\">\n<em class=\"property\"><span class=\"k\">static</span> </em><span class=\"sig-prename descclassname\">RunPython.</span><span class=\"sig-name descname\">noop</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.RunPython.noop\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>指定された順序で処理を行いたくない場合は <code class=\"docutils literal notranslate\">code</code> もしくは <code class=\"docutils literal notranslate\">reverse_code</code> に <code class=\"docutils literal notranslate\">RunPython.noop</code> メソッドを渡してください。この指定は処理を逆順で行いたい場合に特に有用です。</p>\n</dd></dl>\n\n</section>\n<section id=\"separatedatabaseandstate\">\n<h3><code class=\"docutils literal notranslate\">SeparateDatabaseAndState</code><a class=\"heading-anchor\" href=\"#separatedatabaseandstate\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.SeparateDatabaseAndState\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">SeparateDatabaseAndState</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">database_operations<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">state_operations<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.SeparateDatabaseAndState\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>作業の観点からデータベース(スキーマ変更)と状態(自動検知機構による)を組み合わせて併用する、高度に特殊化された処理です。</p>\n<p>2 つの行う処理のリストを受け取り、状態を適用する必要が有る場合は状態に関するリストを利用し、データベースの変更を行う必要が有る場合はデータベースのリストを利用します。あなたがこの操作によって何が起きるかを明確に認識していない場合はこの操作を行わないでください。</p>\n</section>\n</section>\n<section id=\"writing-your-own\">\n<span id=\"writing-your-own-migration-operation\"></span><h2>自分で操作を書く<a class=\"heading-anchor\" href=\"#writing-your-own\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>オペレーションは比較的シンプルな API を持っており、Django に内蔵された機能を独自に補助する処理を簡単に記述できるよう設計されています。<code class=\"docutils literal notranslate\">Operation</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=\"nn\">django.db.migrations.operations.base</span> <span class=\"kn\">import</span> Operation\n\n<span class=\"k\">class</span> <span class=\"nc\">MyCustomOperation</span><span class=\"p\">(</span>Operation<span class=\"p\">):</span>\n\n    <span class=\"c1\"># If this is False, it means that this operation will be ignored by</span>\n    <span class=\"c1\"># sqlmigrate; if true, it will be run and the SQL collected for its output.</span>\n    reduces_to_sql <span class=\"o\">=</span> <span class=\"kc\">False</span>\n\n    <span class=\"c1\"># If this is False, Django will refuse to reverse past this operation.</span>\n    reversible <span class=\"o\">=</span> <span class=\"kc\">False</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> arg1<span class=\"p\">,</span> arg2<span class=\"p\">):</span>\n        <span class=\"c1\"># Operations are usually instantiated with arguments in migration</span>\n        <span class=\"c1\"># files. Store the values of them on self for later use.</span>\n        <span class=\"k\">pass</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">state_forwards</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> app_label<span class=\"p\">,</span> state<span class=\"p\">):</span>\n        <span class=\"c1\"># The Operation should take the &#39;state&#39; parameter (an instance of</span>\n        <span class=\"c1\"># django.db.migrations.state.ProjectState) and mutate it to match</span>\n        <span class=\"c1\"># any schema changes that have occurred.</span>\n        <span class=\"k\">pass</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">database_forwards</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> app_label<span class=\"p\">,</span> schema_editor<span class=\"p\">,</span> from_state<span class=\"p\">,</span> to_state<span class=\"p\">):</span>\n        <span class=\"c1\"># The Operation should use schema_editor to apply any changes it</span>\n        <span class=\"c1\"># wants to make to the database.</span>\n        <span class=\"k\">pass</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">database_backwards</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> app_label<span class=\"p\">,</span> schema_editor<span class=\"p\">,</span> from_state<span class=\"p\">,</span> to_state<span class=\"p\">):</span>\n        <span class=\"c1\"># If reversible is True, this is called when the operation is reversed.</span>\n        <span class=\"k\">pass</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">describe</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># This is used to describe what the operation does in console output.</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;Custom Operation&quot;</span>\n</code></pre></div>\n<p>上の例をテンプレートとして利用する事ができますが、<code class=\"docutils literal notranslate\">django.db.migrations.operations</code> 内の Django 内蔵のオペレーションを参考にする事もできます - これらは <code class=\"docutils literal notranslate\">ProjectState</code> のような半内部的側面を持つマイグレーションフレームワークとその履歴上のモデルを取得する方法、同様に <code class=\"docutils literal notranslate\">ModelState</code> が <code class=\"docutils literal notranslate\">state_forwards()</code> によってその履歴上のモデルを模倣する方法等の可読性が高く広範にわたる例を持っています。</p>\n<p>いくつかの注意すべき点</p>\n<ul>\n<li><p>単純なマイグレーションについて記述するだけであれば <code class=\"docutils literal notranslate\">ProjectState</code> について多くを学ぶ必要は有りません; ただそれがアプリケーションの(それに対して <code class=\"docutils literal notranslate\">get_model</code> を呼ぶことができる)登録情報へのアクセスを提供するプロパティ <code class=\"docutils literal notranslate\">app</code> を持っている事だけ知っていて下さい。</p></li>\n<li><p><code class=\"docutils literal notranslate\">database_forwards</code> および <code class=\"docutils literal notranslate\">database_backwards</code> は共にパラメータとして 2 つの状態を受け取ります; これらは単に適用される事になる <code class=\"docutils literal notranslate\">state_forwards</code> メソッドの差異を表しているだけですが、利便性と実行速度のために渡されます。</p></li>\n<li><p>If you want to work with model classes or model instances from the\n<code class=\"docutils literal notranslate\">from_state</code> argument in <code class=\"docutils literal notranslate\">database_forwards()</code> or\n<code class=\"docutils literal notranslate\">database_backwards()</code>, you must render model states using the\n<code class=\"docutils literal notranslate\">clear_delayed_apps_cache()</code> method to make related models available:</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\">def</span> <span class=\"nf\">database_forwards</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> app_label<span class=\"p\">,</span> schema_editor<span class=\"p\">,</span> from_state<span class=\"p\">,</span> to_state<span class=\"p\">):</span>\n    <span class=\"c1\"># This operation should have access to all models. Ensure that all models are</span>\n    <span class=\"c1\"># reloaded in case any are delayed.</span>\n    from_state<span class=\"o\">.</span>clear_delayed_apps_cache<span class=\"p\">()</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<aside class=\"version-note version-added\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">New in Django 1.11</p><p>This requirement and the <code class=\"docutils literal notranslate\">clear_delayed_apps_cache()</code> method is new.</p>\n</aside>\n</li>\n<li><p>database_backwards メソッドにおける <code class=\"docutils literal notranslate\">to_state</code> は <em>古い</em> 状態を示します;そのため、その値はマイグレーションが状態を戻した場合は現在の状態となります。</p></li>\n<li><p>内蔵されたオペレーションにおいて <code class=\"docutils literal notranslate\">references_model</code> が実装されているのを見つけるかもしれません;これは独自のオペレーションのためでなく自動検知機構のコードの一部として存在しています。</p></li>\n</ul>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>パフォーマンス上の理由から、<code class=\"docutils literal notranslate\">ModelState.fields</code> 内の <a class=\"reference internal\" href=\"/ja/2.0/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\">Field</code></a> のインスタンスはマイグレーション間で再利用されます。これらのインスタンスの属性を決して変更してはいけません。<code class=\"docutils literal notranslate\">state_forwards()</code> 内のフィールドを変更したい場合は、<code class=\"docutils literal notranslate\">ModelState.fields</code> から古いインスタンスを削除して新たなインスタンスと置き換える必要が有ります。<code class=\"docutils literal notranslate\">ModelState.managers</code> 内の <a class=\"reference internal\" href=\"/ja/2.0/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\">Manager</code></a> のインスタンスについても同様です。</p>\n</aside>\n<p>簡単な例として、(PostgreSQL のより興味深い機能を含んだ) PostgreSQL 拡張をロードするオペレーションを作成してみましょう。これはかなり単純な物となります;モデルの状態を変えず、1 つのコマンドを実行するだけです:</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.migrations.operations.base</span> <span class=\"kn\">import</span> Operation\n\n<span class=\"k\">class</span> <span class=\"nc\">LoadExtension</span><span class=\"p\">(</span>Operation<span class=\"p\">):</span>\n\n    reversible <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> name<span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>name <span class=\"o\">=</span> name\n\n    <span class=\"k\">def</span> <span class=\"nf\">state_forwards</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> app_label<span class=\"p\">,</span> state<span class=\"p\">):</span>\n        <span class=\"k\">pass</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">database_forwards</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> app_label<span class=\"p\">,</span> schema_editor<span class=\"p\">,</span> from_state<span class=\"p\">,</span> to_state<span class=\"p\">):</span>\n        schema_editor<span class=\"o\">.</span>execute<span class=\"p\">(</span><span class=\"s2\">&quot;CREATE EXTENSION IF NOT EXISTS </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span>name<span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">database_backwards</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> app_label<span class=\"p\">,</span> schema_editor<span class=\"p\">,</span> from_state<span class=\"p\">,</span> to_state<span class=\"p\">):</span>\n        schema_editor<span class=\"o\">.</span>execute<span class=\"p\">(</span><span class=\"s2\">&quot;DROP EXTENSION </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span>name<span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">describe</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;Creates extension </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span>name\n</code></pre></div>\n</section>","rootId":"module-django.db.migrations.operations","toc":[{"title":"スキーマ操作","anchor":"schema-operations","children":[{"title":"CreateModel","anchor":"createmodel","children":[]},{"title":"DeleteModel","anchor":"deletemodel","children":[]},{"title":"RenameModel","anchor":"renamemodel","children":[]},{"title":"AlterModelTable","anchor":"altermodeltable","children":[]},{"title":"AlterUniqueTogether","anchor":"alteruniquetogether","children":[]},{"title":"AlterIndexTogether","anchor":"alterindextogether","children":[]},{"title":"AlterOrderWithRespectTo","anchor":"alterorderwithrespectto","children":[]},{"title":"AlterModelOptions","anchor":"altermodeloptions","children":[]},{"title":"AlterModelManagers","anchor":"altermodelmanagers","children":[]},{"title":"AddField","anchor":"addfield","children":[]},{"title":"RemoveField","anchor":"removefield","children":[]},{"title":"AlterField","anchor":"alterfield","children":[]},{"title":"RenameField","anchor":"renamefield","children":[]},{"title":"AddIndex","anchor":"addindex","children":[]},{"title":"RemoveIndex","anchor":"removeindex","children":[]}]},{"title":"特別な操作","anchor":"special-operations","children":[{"title":"RunSQL","anchor":"runsql","children":[]},{"title":"RunPython","anchor":"runpython","children":[]},{"title":"SeparateDatabaseAndState","anchor":"separatedatabaseandstate","children":[]}]},{"title":"自分で操作を書く","anchor":"writing-your-own","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API Reference","url":"/ja/2.0/ref/"}],"prev":{"docname":"ref/middleware","title":"ミドルウェア","url":"/ja/2.0/ref/middleware/"},"next":{"docname":"ref/models/index","title":"モデル","url":"/ja/2.0/ref/models/"},"formats":{"html":"/ja/2.0/ref/migration-operations/","markdown":"/ja/2.0/ref/migration-operations.md","json":"/ja/2.0/ref/migration-operations.json"},"source":"https://github.com/django/django/blob/stable/2.0.x/docs/ref/migration-operations.txt","official":"https://docs.djangoproject.com/ja/2.0/ref/migration-operations/","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"]}