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されることがなくなるため、エラーが消えました。

お疲れ様でした。


この記事が気に入ったらサポートをしてみませんか?