#[Django]migrateをやり直す
Django初学者のメモになります。
DB構築をする際にModelを書き直し、migrateをやり直りたい時があったのですが、いろいろとエラーしたりと苦労したので解決策を備忘録します。
[環境]
Django 2.01
python 3.7.2
##想定
- app名「recipe」を作成
- userモデルをカスタマイズしたuserモデルへ変更※
- migrateをやり直したい
※1.いろいろとtipsを覗いたが、カスタマイズUserにする際には、一度migrateをやり直した方が早いと思った。
なので、アプリケーションを作成する際には、最初にカスタマイズUserを作成するべき。
※2.ちなみにカスタマイズuserモデルの作成方法は以下の記事参照
ジャンゴ(django)のカスタムユーザーモデル(Custom User Model)
##やり直し手順
「migrateをやり直したい」ここの手順を下記に記載する。
###1.過去のmigrate履歴を確認
# 過去のmigrate履歴が見れる
>python manage.py showmigrations
admin
[X] 0001_initial
[X] 0002_logentry_remove_auto_add
[X] 0003_logentry_add_action_flag_choices
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
[X] 0010_alter_group_name_max_length
[X] 0011_update_proxy_permissions
contenttypes
[X] 0001_initial
[X] 0002_remove_content_type_name
recipe
[X] 0001_initial
sessions
[X] 0001_initial
結果は上記の通りで[]にxがついているのがmigrteが適応されている履歴になる。
recipeにも[x]がついているので適応済と判断できる。
###2.テーブルを全て削除
接続先のDBの中の、過去にmigrateして生成したテーブルを全て削除(drop)する。
###3.appのmigrationsフォルダの中身を削除
[app名].migrationsのフォルダ中身を全て削除
(今回の場合は、recipe.migrations)
###4. migrate履歴の削除
以下の--fakeオプションのついたコマンドで履歴を削除する。
(カスタマイズUserを適応するやり直しの際には、全て削除しなければ解決しなかったので、adminからsectionsまですべて削除した。)
>python3 manage.py migrate --fake [削除対象] zero
#例:これでrecipeの履歴が削除される
#>python3 manage.py migrate --fake recipe zero
履歴が削除されたかを1と同様のコマンドで確認
admin
[ ] 0001_initial
[ ] 0002_logentry_remove_auto_add
[ ] 0003_logentry_add_action_flag_choices
auth
[ ] 0001_initial
[ ] 0002_alter_permission_name_max_length
[ ] 0003_alter_user_email_max_length
[ ] 0004_alter_user_username_opts
[ ] 0005_alter_user_last_login_null
[ ] 0006_require_contenttypes_0002
[ ] 0007_alter_validators_add_error_messages
[ ] 0008_alter_user_username_max_length
[ ] 0009_alter_user_last_name_max_length
[ ] 0010_alter_group_name_max_length
[ ] 0011_update_proxy_permissions
contenttypes
[ ] 0001_initial
[ ] 0002_remove_content_type_name
recipe
[ ] 0001_initial
sessions
[ ] 0001_initial
すべての履歴が削除されていることを確認。
###5.appのmigrationファイルを生成
いつもの通りmigrationファイル生成
>python manage.py makemigrations [app名]
###6.migrateを実行
いつもの通りmigrateを実行
>python manage.py migrate
これでDBを確認し、テーブルが生成されていることを確認する。
以上になります。
間違いなどありましたら、ご指摘をお願いいたします。
##参考