背景と問題点
djangoでmigrationがうまくいかず、以下のようなエラーで悩んでいた。
django.db.utils.ProgrammingError: 列app1_model1.hogehogeは存在しません
ググると結局migrationファイルを消せとしか出てこないのではーーーーーって気持ちで
$ python manage.py migrate --fake model1 zero
find . -path "*/migrations/*.py" -not -name "__init__.py" -delete find . -path "*/migrations/*.pyc" -delete
と、migrationsフォルダの__init__.py以外のファイル・フォルダをすべて抹消した。
それでmigrationファイルだけは消えたものの、データベース自体は残っているので初回makemigrationをすると当然だが全部テーブルを作り直そうとする。そのままmigrateすると
django.db.utils.ProgrammingError: リレーション hogeはすでに存在します
というエラーが出てくる。
解決法
公式ドキュメントに記述があった。
Changed in Django 1.8:
The --fake-initial
flag was added to migrate
; previously, initial migrations were always automatically fake-applied if existing tables were detected.
参考: https://docs.djangoproject.com/en/1.8/topics/migrations/#upgrading-from-south
あーーーーーーーーーーなるほど、ということで
$ python manage.py migrate --fake-initial
これで全部うまくmigrateできたようで、無事解決した。