Django のマイクレーションをしたときに出たエラーの対処方法をまとめました。
マイグレーションファイルを探す
何はともあれ、エラーを出したマイグレーションファイルを探します。マイグレーションを実行すると、次のような出力が表示されています。
$ python manage.py migrate
Operations to perform:
Apply all migrations: ...
Running migrations:
Applying XXX.000Y_ZZZZZ...Traceback (most recent call last):
...
アプリケーション名 (XXX) とマイグレーションのファイル名 (000Y_ZZZZZ) は Running migrations: の次の行に表示されているので、該当のマイグレーションファイルは該当のアプリケーションディレクトリー内の migrations ディレクトリーにあることが分かります。
ValueError: Cannot alter field XXX into YYY
Cannot alter field XXX into YYY – they are not compatible types (you cannot alter to or from M2M fields, or add or remove through= on M2M fields)
モデルで ManyToManyField を使用した時にこのエラーが出ました。対処方法は、マイグレーションファイルを開いて migrations.AlterField 関数を探します。
...
class Migration(migrations.Migration):
...
operations = [
...
migrations.AlterField(
model_name='...',
name='...',
field=models.ManyToManyField(...)
),
....
この migrations.AlterField 関数を、次のように migrations.RemoveField 関数と migrations.AddField 関数に分割します。
...
class Migration(migrations.Migration):
...
operations = [
...
migrations.RemoveField(
model_name='...',
name='...',
),
migrations.AddField(
model_name='...',
name='...',
field=models.ManyToManyField(...)
),
....
上書き保存したら、もう一度マイグレーションを実行します。
$ python manage.py migrate
django.db.utils.OperationalError: (1050, “Table ‘XXX’ already exists”)
XXX テーブルがすでに作られてしまっているので、データベースから XXX テーブルを削除します。
コメントする