Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Migration admin.0001_initial is applied before its dependency app.0001_initial on database 'default'

Tags:

python

django

I am trying to make custom made user model for my project in Django.

My models.py:

class myCustomeUser(AbstractUser):
    id = models.AutoField(primary_key=True)
    username = models.CharField(max_length=20, unique="True", blank=False)
    password = models.CharField(max_length=20, blank=False)
    is_Employee = models.BooleanField(default=False)
    is_Inspector = models.BooleanField(default=False)
    is_Industry = models.BooleanField(default=False)
    is_Admin = models.BooleanField(default=False)


class Industry(models.Model):
    user = models.OneToOneField(myCustomeUser, on_delete=models.CASCADE, primary_key=True, related_name='industry_releted_user')
    name = models.CharField(max_length=200, blank=True)
    owner = models.CharField(max_length=200, blank=True)
    license = models.IntegerField(null=True, unique=True)
    industry_extrafield = models.TextField(blank=True)


class Employee(models.Model):
    user = models.OneToOneField(myCustomeUser, on_delete=models.CASCADE, primary_key=True, related_name='employee_releted_user')
    industry = models.OneToOneField(Industry, on_delete=models.CASCADE, related_name='employee_releted_industry')
    i_id = models.IntegerField(null=True, blank=False, unique=True)
    name = models.CharField(max_length=200, blank=False, null=True)
    gmail = models.EmailField(null=True, blank=False, unique=True)
    rank = models.CharField(max_length=20, blank=False, null=True)
    employee_varified = models.BooleanField(default=False)


class Inspector(models.Model):
    user = models.OneToOneField(myCustomeUser, on_delete=models.CASCADE, primary_key=True, related_name='inspector_releted_user')
    inspector_extrafield = models.TextField(blank=True)


class Admin(models.Model):
    user = models.OneToOneField(myCustomeUser, on_delete=models.CASCADE, primary_key=True, related_name='admin_releted_user')
    admin_extrafield = models.TextField(blank=True)

in settings.py:

AUTH_USER_MODEL = 'app.myCustomeUser'

Here admin.site.register is also done in admin.py. Now it shows the following message in the terminal while I try to migrate or makemigrations:

Traceback (most recent call last):
  File "manage.py", line 21, in <module>
    main()
  File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "G:\Python\lib\site-packages\django\core\management\__init__.py", line 401, in execute_from_command_line   
    utility.execute()
  File "G:\Python\lib\site-packages\django\core\management\__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "G:\Python\lib\site-packages\django\core\management\base.py", line 328, in run_from_argv
    self.execute(*args, **cmd_options)
  File "G:\Python\lib\site-packages\django\core\management\base.py", line 369, in execute
    output = self.handle(*args, **options)
  File "G:\Python\lib\site-packages\django\core\management\base.py", line 83, in wrapped
    res = handle_func(*args, **kwargs)
  File "G:\Python\lib\site-packages\django\core\management\commands\makemigrations.py", line 101, in handle       
    loader.check_consistent_history(connection)
  File "G:\Python\lib\site-packages\django\db\migrations\loader.py", line 295, in check_consistent_history        
    raise InconsistentMigrationHistory(
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency app.0001_initial on database 'default'.

What does it mean? And I also don't want to set the default value of username & password in this myCustomeUser model. And also please suggest me that, is this a correct way to make usermodel?

like image 231
Kanchon Gharami Avatar asked Dec 13 '25 19:12

Kanchon Gharami


2 Answers

This error will usually happen if you've done your first initial migration without including your custom user model migration file. Exactly as the message says:

"admin.0001_initial is applied before its dependency custom_user_app_label.0001_initial on database 'default'"

Since beginners will always do their initial migration and then create a custom user afterward. In the first migration, it will migrate all built-in Django apps including admin. Now with the custom user model, Django wanted it to be the first initial migration to be executed.

See Django docs Changing to a custom user model mid-project.

Due to limitations of Django’s dynamic dependency feature for swappable models, the model referenced by AUTH_USER_MODEL must be created in the first migration of its app (usually called 0001_initial); otherwise, you’ll have dependency issues.


In my case, I have Django v4.1 installed.

This is how I reproduce the issue:

  • I had initially migrated my application previously. Then
  • Created a custom User.
  • Added the app into INSTALLED_APPS.
  • Created migration files python manage.py makemigrations
  • Set AUTH_USER_MODEL to the new custom User by AUTH_USER_MODEL = 'myapp_label.User'
  • Got the migration error issue as the OP.

This is how I resolve the issue:

  • Drop the database but DO NOT delete the User initial migration.

  • Make sure in your 0001_initial.py -> class Migration.initial is set to True.

  • Run migration python manage.py migrate

  • Your User initial migration should be the first migration file in the order of migration execution. See this migration output as example:

    Running migrations:
     Applying myapp_label.0001_initial... OK
     Applying contenttypes.0001_initial... OK
     Applying admin.0001_initial...
    

As you can see it was executed first followed by the contenttypes then the admin.

like image 169
Roel Avatar answered Dec 15 '25 09:12

Roel


  1. Comment path('admin/', admin.site.urls) in project urls.py file.
  2. Then in settings.py file comment django.contrib.admin in installed app.
  3. Do makemigrations and migrate it new table with your customize fields for user is created in table.
  4. You can uncomment out above after the migration, it will work too.

Working fine.

like image 23
Gaurav Vishnu Shinde Avatar answered Dec 15 '25 09:12

Gaurav Vishnu Shinde



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!