5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Migration admin.0001_initial is applied before its dependencyが出た時の対処法

Last updated at Posted at 2022-10-01

前提

  • Dockerおよびdocker-composeを使用
  • カスタムユーザModelを作成済み

エラーが発生するまでの流れ

カスタムユーザを作成後、makemigrationsでmigrationファイルを作成し、migrateします

terminal
docker-compose exec app python manage.py makemigrations
Migrations for '<アプリケーション名>':
  <アプリケーション名>/migrations/0001_initial.py
    - Create model User
python manage.py migrate

すると、以下のエラーが出ることがあると思います

terminal
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency <アプリケーション名>.0001_initial on database 'default'

エラーが表示される理由

カスタムユーザを作成する前にmigrateすると下記のようにすでにあるDjangoのデフォルトのadminユーザのModelとカスタムユーザのModelが衝突してしまうために起こるエラーです

auth_group
auth_group_permissions
auth_permission
authtoken_token
django_admin_log
django_content_type
django_migrations
django_session 

INSTALLED_APPS内のdjango.contrib.adminAUTH_USER_MODELをコメントアウトしてからもう一度migrationファイルを作成してmigrateする記事もありましたが、docker-composeを使っているのであれば永続volumeを削除する方法の方が手取り早くて簡単なので今回はそちらの方法を紹介します

永続volumeを削除しよう

まずはコンテナをdownします

terminal
docker-compose down

下記のコマンドでvolume名を調べます

terminal
docker volume ls

以下のコマンドで該当するvolume名を指定し、削除します
削除できない場合はrm -f で無理やり削除することもできます

terminal
docker volume rm <ボリューム名>

コンテナを再起動します

terminal
docker-compose up -d

すでにmigratationファイルがあるのでmigrateするとカスタムユーザのmigrationがうまく反映されます
以下のような出力結果が表示されたら成功です

terminal
docker-compose exec app python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, <アプリケーション名>, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0001_initial... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying <アプリケーション名>.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying sessions.0001_initial... OK

まとめ

はじめてこのエラーに遭遇した時はかなり混乱しました。実際の開発ではデフォルトのadminのModelではなく、自分達でカスタムユーザを作るのが一般的なので今後同じエラーに遭遇される方の少しでもお役に立てたらと思い、書きました

記事の紹介

以下の記事も作成しましたので見ていただけると幸いです

参考

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?