{"title":"マイグレーション操作","version":"4.0","locale":"ja","docname":"ref/migration-operations","url":"/ja/4.0/ref/migration-operations/","canonical":"https://djangodocs.dev/ja/4.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/4.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>If you need an empty migration file to write your own <code class=\"docutils literal notranslate\">Operation</code> objects\ninto, use <code class=\"docutils literal notranslate\">python manage.py makemigrations --empty yourappname</code>, but be aware\nthat manually adding schema-altering operations can confuse the migration\nautodetector and make resulting runs of <a class=\"reference internal\" href=\"/ja/4.0/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\">makemigrations</code></a> output\nincorrect code.</p>\n<p>Django が提供するコア機能は全て <code class=\"docutils literal notranslate\">django.db.migrations.operations</code> モジュールから利用できます。</p>\n<p>より入門的な内容に関しては、 <a class=\"reference internal\" href=\"/ja/4.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> is an optional list of other classes to have this model inherit from;\nit can contain both class objects as well as strings in the format\n<code class=\"docutils literal notranslate\">&quot;appname.ModelName&quot;</code> if you want to depend on another model (so you inherit\nfrom the historical version). If it's not supplied, it defaults to inheriting\nfrom the standard <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/4.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/4.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/4.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/4.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<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>On older databases, adding a field with a default value may cause a full\nrewrite of the table. This happens even for nullable fields and may have a\nnegative performance impact. To avoid that, the following steps should be\ntaken.</p>\n<ul class=\"simple\">\n<li><p>Add the nullable field without the default value and run the\n<a class=\"reference internal\" href=\"/ja/4.0/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\">makemigrations</code></a> command. This should generate a migration with\nan <code class=\"docutils literal notranslate\">AddField</code> operation.</p></li>\n<li><p>Add the default value to your field and run the <a class=\"reference internal\" href=\"/ja/4.0/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\">makemigrations</code></a>\ncommand. This should generate a migration with an <code class=\"docutils literal notranslate\">AlterField</code>\noperation.</p></li>\n</ul>\n</aside>\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 is irreversible)\nif the field is nullable or if it has a default value that can be used to\npopulate the recreated column. If the field is not nullable and does not have a\ndefault 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/4.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/4.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/4.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/4.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<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/4.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<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 id=\"addconstraint\">\n<h3><code class=\"docutils literal notranslate\">AddConstraint</code><a class=\"heading-anchor\" href=\"#addconstraint\"><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.AddConstraint\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AddConstraint</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_name</em>, <em class=\"sig-param\">constraint</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AddConstraint\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Creates a <a class=\"reference internal\" href=\"/ja/4.0/ref/models/constraints/\"><span class=\"doc\">constraint</span></a> in the database table for\nthe model with <code class=\"docutils literal notranslate\">model_name</code>.</p>\n</section>\n<section id=\"removeconstraint\">\n<h3><code class=\"docutils literal notranslate\">RemoveConstraint</code><a class=\"heading-anchor\" href=\"#removeconstraint\"><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.RemoveConstraint\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RemoveConstraint</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.RemoveConstraint\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Removes the constraint 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>Allows running of arbitrary SQL on the database - useful for more advanced\nfeatures of database backends that Django doesn't support directly.</p>\n<p><code class=\"docutils literal notranslate\">sql</code>, and <code class=\"docutils literal notranslate\">reverse_sql</code> if provided, should be strings of SQL to run on\nthe database. On most database backends (all but PostgreSQL), Django will\nsplit the SQL into individual statements prior to executing them.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>On PostgreSQL and SQLite, only use <code class=\"docutils literal notranslate\">BEGIN</code> or <code class=\"docutils literal notranslate\">COMMIT</code> in your SQL in\n<a class=\"reference internal\" href=\"/ja/4.0/howto/writing-migrations/#non-atomic-migrations\"><span class=\"std std-ref\">non-atomic migrations</span></a>, to avoid breaking\nDjango's transaction state.</p>\n</aside>\n<p>文字列もしくは 2 値のタプルのリストを渡すことができます。その内後者はクエリとパラメータを <a class=\"reference internal\" href=\"/ja/4.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>The <code class=\"docutils literal notranslate\">reverse_sql</code> queries are executed when the migration is unapplied. They\nshould undo what is done by the <code class=\"docutils literal notranslate\">sql</code> queries. For example, to undo the above\ninsertion with a deletion:</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    sql<span class=\"o\">=</span><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    reverse_sql<span class=\"o\">=</span><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>If <code class=\"docutils literal notranslate\">reverse_sql</code> is <code class=\"docutils literal notranslate\">None</code> (the default), the <code class=\"docutils literal notranslate\">RunSQL</code> operation is\nirreversible.</p>\n<p>The <code class=\"docutils literal notranslate\">state_operations</code> argument allows you to supply operations that are\nequivalent to the SQL in terms of project state. For example, if you are\nmanually creating a column, you should pass in a list containing an <code class=\"docutils literal notranslate\">AddField</code>\noperation here so that the autodetector still has an up-to-date state of the\nmodel. If you don't, when you next run <code class=\"docutils literal notranslate\">makemigrations</code>, it won't see any\noperation that adds that field and so will try to run it again. For example:</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/4.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/4.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/4.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/4.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>The <code class=\"docutils literal notranslate\">reverse_code</code> argument is called when unapplying migrations. This\ncallable should undo what is done in the <code class=\"docutils literal notranslate\">code</code> callable so that the\nmigration is reversible. If <code class=\"docutils literal notranslate\">reverse_code</code> is <code class=\"docutils literal notranslate\">None</code> (the default), the\n<code class=\"docutils literal notranslate\">RunPython</code> operation is irreversible.</p>\n<p>オプションの <code class=\"docutils literal notranslate\">hints</code> 引数はルーティングの決定を補助するためにデータベースルータの <a class=\"reference internal\" href=\"/ja/4.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/4.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/4.0/topics/migrations/#migration-squashing\"><span class=\"std std-ref\">マイグレーションの統合</span></a> を行った際に消去する(省略する)か否かを決定します。</p>\n<p>You are advised to write the code as a separate function above the <code class=\"docutils literal notranslate\">Migration</code>\nclass in the migration file, and pass it to <code class=\"docutils literal notranslate\">RunPython</code>. Here's an example of\nusing <code class=\"docutils literal notranslate\">RunPython</code> to create some initial objects on a <code class=\"docutils literal notranslate\">Country</code> model:</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/4.0/topics/migrations/#data-migrations\"><span class=\"std std-ref\">データのマイグレーション</span></a> の作成、独自のデータ更新と構成変更、そして ORM や Python のコードにアクセスを必要とするあらゆる操作のために行われる一般的な操作です。</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/4.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>データベース(スキーマ変更)と状態(自動検出機能)という2つの側面を混在させてマッチさせることができる、高度に専門化された操作です。</p>\n<p>これは2つの操作のリストを受け入れます。状態への適用を求められたときは、 <code class=\"docutils literal notranslate\">state_operations</code> リストを使用します(これは <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> の <code class=\"docutils literal notranslate\">state_operations</code> 引数の一般化されたバージョンです)。データベースへの変更の適用を求められたときは、 <code class=\"docutils literal notranslate\">database_operations</code> リストを使用します。</p>\n<p>データベースの実際の状態と Django の状態のビューが同期しなくなると、マイグレーションフレームワークが壊れてしまい、データが失われることさえあります。じっくりと、データベースと状態の操作を慎重にチェックすべきです。データベースの操作をチェックするために、 <a class=\"reference internal\" href=\"/ja/4.0/ref/django-admin/#django-admin-sqlmigrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">sqlmigrate</code></a> と <a class=\"reference internal\" href=\"/ja/4.0/ref/django-admin/#django-admin-dbshell\"><code class=\"xref std std-djadmin docutils literal notranslate\">dbshell</code></a> を使うことができます。状態の操作をチェックするために <a class=\"reference internal\" href=\"/ja/4.0/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\">makemigrations</code></a> 、特に <a class=\"reference internal\" href=\"/ja/4.0/ref/django-admin/#cmdoption-makemigrations-dry-run\"><code class=\"xref std std-option docutils literal notranslate\">--dry-run</code></a> を使うことができます。</p>\n<p>For an example using <code class=\"docutils literal notranslate\">SeparateDatabaseAndState</code>, see\n<a class=\"reference internal\" href=\"/ja/4.0/howto/writing-migrations/#changing-a-manytomanyfield-to-use-a-through-model\"><span class=\"std std-ref\">Changing a ManyToManyField to use a through model</span></a>.</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\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">migration_name_fragment</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Optional. A filename part suitable for automatically naming a</span>\n        <span class=\"c1\"># migration containing this operation, or None if not applicable.</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;custom_operation_</span><span class=\"si\">%s</span><span class=\"s2\">_</span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>arg1<span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span>arg2<span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"version-note version-added\" data-version=\"3.2\" role=\"note\">\n<p class=\"version-note-title\">New in Django 3.2</p><p>The <code class=\"docutils literal notranslate\">migration_name_fragment</code> property was added.</p>\n</aside>\n<p>You can take this template and work from it, though we suggest looking at the\nbuilt-in Django operations in <code class=\"docutils literal notranslate\">django.db.migrations.operations</code> - they cover\na lot of the example usage of semi-internal aspects of the migration framework\nlike <code class=\"docutils literal notranslate\">ProjectState</code> and the patterns used to get historical models, as well\nas <code class=\"docutils literal notranslate\">ModelState</code> and the patterns used to mutate historical models in\n<code class=\"docutils literal notranslate\">state_forwards()</code>.</p>\n<p>いくつかの注意すべき点</p>\n<ul>\n<li><p>You don't need to learn too much about <code class=\"docutils literal notranslate\">ProjectState</code> to write migrations;\njust know that it has an <code class=\"docutils literal notranslate\">apps</code> property that gives access to an app\nregistry (which you can then call <code class=\"docutils literal notranslate\">get_model</code> on).</p></li>\n<li><p><code class=\"docutils literal notranslate\">database_forwards</code> and <code class=\"docutils literal notranslate\">database_backwards</code> both get two states passed\nto them; these represent the difference the <code class=\"docutils literal notranslate\">state_forwards</code> method would\nhave applied, but are given to you for convenience and speed reasons.</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</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/4.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/4.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>As an example, let's make an operation that loads PostgreSQL extensions (which\ncontain some of PostgreSQL's more exciting features). Since there's no model\nstate changes, all it does is run one command:</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\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">migration_name_fragment</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;create_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":"AddConstraint","anchor":"addconstraint","children":[]},{"title":"RemoveConstraint","anchor":"removeconstraint","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/4.0/ref/"}],"prev":{"docname":"ref/middleware","title":"ミドルウェア","url":"/ja/4.0/ref/middleware/"},"next":{"docname":"ref/models/index","title":"モデル","url":"/ja/4.0/ref/models/"},"formats":{"html":"/ja/4.0/ref/migration-operations/","markdown":"/ja/4.0/ref/migration-operations.md","json":"/ja/4.0/ref/migration-operations.json"},"source":"https://github.com/django/django/blob/stable/4.0.x/docs/ref/migration-operations.txt","official":"https://docs.djangoproject.com/ja/4.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","it","pt-br","ko","es","el","pl"]}