关于 django.db.migrations.exceptions.InconsistentMigrationHistory

出现的原因

出现这个的问题大概有几种:

  1. 迁移过程失败,导致 django_migrations 中有记录,但实际没有表
  2. 修改了 django 内部的表结构没有做相应的处理

诸如这几种原因其实都是因为 django_migrations 表中有与要迁移的新表相关的表,所以迁移的时候导致了冲突发生。

我出现这个问题的原因是继承并扩展了 django 的 AbstractUser 类,进行迁移的时候,由于项目开头执行初始化的 migrate 已经创建了 auth_user 相关的表,该表与我的表功能一致,故发生了冲突。

django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency user.0001_initial on database 'default'.

解决方案

  1. 删除相关的表
  2. 删除 django_migrations 中相关的记录

关于第二点需要注意,如果删除 django_migrations 表,那么原本不受影响的表在下一次迁移的时候也会被重新提交,又造成新的冲突,那时候就只能清除数据库了。

示例如下

在我下面的表中,除了 blog、django_migrations,都是在初始化时新建出来的表。

+----------------------------+
| Tables_in_yipsweb          |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| blog                       |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
+----------------------------+

删掉对应表之后状态如下:

+-------------------+
| Tables_in_yipsweb |
+-------------------+
| blog              |
| django_migrations |
+-------------------+

接下来删除 django_migrations 中对应的记录。在上一步中删除的表位于 id 19 的条目之上,将 id 小于 19 的所有条目删除。

mysql> select * from django_migrations;
+----+--------------+--------------------------------------------------+----------------------------+
| id | app          | name                                             | applied                    |
+----+--------------+--------------------------------------------------+----------------------------+
|  1 | contenttypes | 0001_initial                                     | 2022-03-14 04:07:28.286762 |
|  2 | auth         | 0001_initial                                     | 2022-03-14 04:07:29.684629 |
|  3 | admin        | 0001_initial                                     | 2022-03-14 04:07:29.956432 |
|  4 | admin        | 0002_logentry_remove_auto_add                    | 2022-03-14 04:07:29.979374 |
|  5 | admin        | 0003_logentry_add_action_flag_choices            | 2022-03-14 04:07:29.991648 |
|  6 | contenttypes | 0002_remove_content_type_name                    | 2022-03-14 04:07:30.234672 |
|  7 | auth         | 0002_alter_permission_name_max_length            | 2022-03-14 04:07:30.380076 |
|  8 | auth         | 0003_alter_user_email_max_length                 | 2022-03-14 04:07:30.436457 |
|  9 | auth         | 0004_alter_user_username_opts                    | 2022-03-14 04:07:30.460891 |
| 10 | auth         | 0005_alter_user_last_login_null                  | 2022-03-14 04:07:30.620477 |
| 11 | auth         | 0006_require_contenttypes_0002                   | 2022-03-14 04:07:30.629054 |
| 12 | auth         | 0007_alter_validators_add_error_messages         | 2022-03-14 04:07:30.642607 |
| 13 | auth         | 0008_alter_user_username_max_length              | 2022-03-14 04:07:30.761427 |
| 14 | auth         | 0009_alter_user_last_name_max_length             | 2022-03-14 04:07:30.913584 |
| 15 | auth         | 0010_alter_group_name_max_length                 | 2022-03-14 04:07:30.949697 |
| 16 | auth         | 0011_update_proxy_permissions                    | 2022-03-14 04:07:30.963744 |
| 17 | auth         | 0012_alter_user_first_name_max_length            | 2022-03-14 04:07:31.101315 |
| 18 | sessions     | 0001_initial                                     | 2022-03-14 04:07:31.184898 |
| 19 | blog         | 0001_initial                                     | 2022-03-15 08:45:10.789230 |
| 20 | blog         | 0002_alter_blogmodel_articleid                   | 2022-03-15 16:50:59.163678 |
| 21 | blog         | 0003_alter_blogmodel_options_blogmodel_viewcount | 2022-03-16 01:37:30.220132 |
+----+--------------+--------------------------------------------------+----------------------------+

删除后重新执行迁移,成功
关于 django.db.migrations.exceptions.InconsistentMigrationHistory_第1张图片

你可能感兴趣的:(django的朝花夕拾,python,django)