Django 途中からユーザーモデルをカスタム
これをやろうとして、3日間詰まりました。その原因としてこれに関する記事がほとんどなかったため、これを書きます。
今回のエラーは、結論から言うとユーザー認証モデルアプリを開発途中で作成した際に、デフォルトのaccount、socialaccountというマイグレーションファイルが邪魔で、うまく自作ユーザモデルがmigrateができないというエラーです。
エラー文はこれ↓
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration account.0001_initial is applied before its dependency <自作ユーザモデル認証アプリ名>.0001_initial on database 'default'.
migrationsはできるが、migrateをするときに「自作モデルとデフォルトのデータベースの依存関係作成する前に、デフォルトのaccountが先に適用されている。」というエラーが出る。
これを解決するために調べたところ、記事が見つかりました。
https://qiita.com/kanzaki0507/items/df056f20f3c42bae1abf
この記事の通り、
・自作アプリのmigrationディレクトリの__init__以外のファイルを全て削除
・urls.pyのpath('admin/', admin.site.urls)をコメントアウト
・settings.pyのINSTALLED_APPSの'django.contrib.admin',をコメントアウト
そして、makemigrationsとmigrateしてみました。調べてみると、これで解決する人もいるようでした。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
上記でも解決できない場合は
少し横暴な気もするが、私はこれで解決しました。
・1:上記の3ステップを行う
・2:INSTALLED _APPSの自作ユーザモデルのあるアプリをコメントアウト
ex) INSTALLED_APPS = [
# customuser.apps.CustomuserConfig,
・
・
]
・3:settings.pyの
AUTH _USER _MODEL='<アプリ名>.<ユーザーモデルクラス名>'
をコメントアウトする。
・4:ターミナルで、~~~ manage.py migrate account zero
~~~ manage.py migrate socialaccount zero
を実行し、この二つのマイグレーションの適用を外す。
・5:~~~ manage.py makemigrations <自作アプリ名>
~~~ manage.py migrate <自作アプリ名>
このステップを踏むことで、accountとsocialaccountというマイグレーションファイルが、自作アプリより先にmigrateされることがなくなるため、エラーが消えました。
お疲れ様でした。
この記事が気に入ったらサポートをしてみませんか?