1.djangoでmakemigrations -> migrate がうまくいかない。
python3 manage.py migrate
(中略)
django.db.utils.OperationalError: table "common_category" already exists
sqliteのDBで、dbファイルだけコピってmigrationsのファイルをなくしてしまったわけです。
その状況で新たにmakemigrationsしても「すでにテーブルが有るぞ」となってしまう。
##2.--fake [app名] オプションを使ってみる。
migrateの履歴に「ちゃんとmigrateしたよ」と偽情報を流すような感じ。
python3 manage.py migrate --fake common
Operations to perform:
Apply all migrations: common
Running migrations:
Applying common.0004_auto_20180528_1203... FAKED
#
showmigrationsでみてみると無事クリアできてる。
# python3 manage.py showmigrations
admin
[X] 0001_initial
[X] 0002_logentry_remove_auto_add
auth
[X] 0001_initial
[X] 0002_alter_permission_name_max_length
[X] 0003_alter_user_email_max_length
[X] 0004_alter_user_username_opts
[X] 0005_alter_user_last_login_null
[X] 0006_require_contenttypes_0002
[X] 0007_alter_validators_add_error_messages
[X] 0008_alter_user_username_max_length
[X] 0009_alter_user_last_name_max_length
common
[X] 0001_initial
[X] 0002_auto_20180307_1640
[X] 0003_auto_20180521_1522
[X] 0004_auto_20180528_1203
contenttypes
[X] 0001_initial
[X] 0002_remove_content_type_name
django_celery_beat
[X] 0001_initial
[X] 0002_auto_20161118_0346
[X] 0003_auto_20161209_0049
[X] 0004_auto_20170221_0000
[X] 0005_add_solarschedule_events_choices
[X] 0006_auto_20180210_1226
3.fakeを外したい。(SQLを再度実行したい)
# python3 manage.py showmigrations macaddr
macaddr
[X] 0001_initial
macaddrというアプリを作成し、makemigrationsしました。
その後、python3 manage.py migrate --fake とした状態。
python3 manage.py migrate --fake macaddr zero
というzeroオプションをつけて
macaddr [X] 0001_initial
↑のチェックを外します
python3 manage.py migrate --fake macaddr zero
Operations to perform:
Unapply all migrations: macaddr
Running migrations:
Rendering model states... DONE
Unapplying macaddr.0001_initial... FAKED
# python3 manage.py showmigrations macaddr
macaddr
[ ] 0001_initial
チェックがはずれました。
migrateします。
# python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, common, contenttypes, django_celery_beat, macaddr, sessions, sites
Running migrations:
Applying macaddr.0001_initial... OK
無事テーブルが作成されました。
テーブル消したりしなくていいので焦らないでやること。