Har*_*nan 46 python django database-migration django-models django-rest-framework
当我跑
python manage.py migrate
Run Code Online (Sandbox Code Playgroud)
在我的django项目中,我收到以下错误
Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "/home/hari/project/env/local/lib/python2.7/site- packages/django/core/management/__init__.py", line 363, in execute_from_command_line
utility.execute()
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 355, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 283, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 330, in execute
output = self.handle(*args, **options)
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 86, in handle
executor.loader.check_consistent_history(connection)
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/db/migrations/loader.py", line 298, in check_consistent_history
connection.alias,
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency account.0001_initial on database 'default'.
Run Code Online (Sandbox Code Playgroud)
我有一个像下面这样的用户模型
class User(AbstractUser):
place = models.CharField(max_length=64, null=True, blank=True)
address = models.CharField(max_length=128, null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)
那我怎么解决这个问题呢?
小智 65
由于您使用的是自定义用户模型,因此您可以先注释掉
INSTALLED_APPS = [
...
#'django.contrib.admin',
...
]
Run Code Online (Sandbox Code Playgroud)
在您的Installed_Apps设置中.然后跑
python manage.py migrate.
Run Code Online (Sandbox Code Playgroud)
完成后取消注释
'django.contrib.admin'
Run Code Online (Sandbox Code Playgroud)
Air*_*irs 34
让我们从这个页面上的大多数答案解决问题开始:
如果正确使用Django的迁移系统,则永远不必删除数据库,并且一旦进行了迁移,就不应该删除迁移
现在,最适合您的解决方案取决于许多因素,包括您对Django的体验,对迁移系统的理解程度以及数据库中数据的价值.
简而言之,有两种方法可以解决任何迁移错误.
采取核选择.警告:这只是一个选项,你是独自工作.如果其他人依赖现有迁移,则无法删除它们.
python3 -m manage makemigrations.这应该可以消除您在迁移中遇到的依赖关系或不一致问题.InconsistentMigrationHistory抱怨.python3 -m manage migrate确定错误的原因并解决它,因为(根据经验说)原因几乎肯定是你做的傻事.(通常由于不了解如何正确使用迁移系统).基于错误我已经导致了三个类别.
makemigrations --merge可以解决此问题,否则有人将不得不将其迁移回滚到分支点以解决此问题.InconsistentMigrationHistory提问者所遭受的问题,也是我到达此页面时遇到的问题].为了管理这个,有人手动搞乱了django_migrations表,或者在应用后删除了迁移.要解决此问题,您将不得不弄清楚不一致的方式并手动解决它.如果您的数据库架构是正确的,并且只是您的迁移历史记录错误,您可以手动编辑该django_migrations表来解决此问题.如果您的数据库架构错误,那么您还必须手动编辑它以使其与应有的一致.根据您对问题的描述和您选择的答案,我将假设您是独自工作的,是Django的新手,并且不关心您的数据.所以核选项可能适合你.
如果你不是在这种情况下,上面的文字看起来像胡言乱语,那么我建议请求Django用户的邮件列表寻求帮助.那里有非常有帮助的人可以帮助您解决您所处的具体问题.
有信心,你可以解决这个错误而不去核!
Arp*_*nki 23
数据库中的django_migrations表是不一致的原因,只删除本地路径中的所有迁移都不起作用.
您必须从数据库中截断django_migrations表,然后再次尝试应用迁移.它应该工作,但如果没有,那么再次运行makemigrations然后迁移.
注意:不要忘记备份您的数据.
Dr.*_*nni 16
这里如何妥善解决这个问题.
在项目内的迁移文件夹中执行以下步骤:
瞧.
tbm*_*tbm 11
在执行任何其他步骤之前,请备份数据库。然后再次备份。
删除所有自定义用户模型代码,在设置中禁用自定义模型和应用程序,然后:
python manage.py dumpdata auth --natural-primary --natural-foreign > auth.json
python manage.py migrate auth zero # This will also revert out the admin migrations
Run Code Online (Sandbox Code Playgroud)
然后添加您的自定义模型,在设置中进行设置,然后重新启用该应用程序。确保您尚未在此应用程序上进行迁移。
然后:
python manage.py makemigrations <your-app>
python manage.py migrate
python manage.py loaddata auth.json # Assumes your user-model isn't TOO dissimilar to the standard one.
Run Code Online (Sandbox Code Playgroud)
完毕!
小智 10
django.db.migrations.exceptions.InconsistentMigrationHistory:迁移admin.0001_initial在数据库'default'上的依赖项account.0001_initial之前应用。
因此,我们可以首先在没有admin(admin.0001_initial)的情况下迁移数据库。
迁移依赖项后,执行命令migration admin.0001_initial。
Python manage.py makemigrations应用程序名称
Python manage.py迁移应用名称
$:Python manage.py makemigrations应用程序名称
$:Python manage.py迁移应用名称
NaS*_*aiN 10
通过在迁移之前在settings.py中评论应用程序管理员来解决
django.contrib.admin
Run Code Online (Sandbox Code Playgroud)
在 urls.py 中,
('admin/', admin.site.urls)
Run Code Online (Sandbox Code Playgroud)
迁移后取消注释
小智 8
根据django文档中的建议,在添加自定义用户模型后,这在新项目中发生了。
如果您要开始一个新项目,强烈建议您设置一个自定义用户模型,即使默认用户模型足以满足您的需要。
这是我为解决问题所做的工作。
根据@jackson,暂时将django.contrib.admin注释掉。
INSTALLED_APPS = [
...
#‘django.contrib.admin’,
...
]
Run Code Online (Sandbox Code Playgroud)
还要在urls.py中注释掉管理站点:
urlpatterns = [
path('profile/', include('restapp.urls')),
#path('admin/', admin.site.urls),
]
Run Code Online (Sandbox Code Playgroud)
如果不注释路径('admin /'),则在运行时会出现错误“ LookupError:未安装带有标签'admin'的应用”
python manage.py migrate
Run Code Online (Sandbox Code Playgroud)
迁移完成后,请取消注释以上两项。
小智 6
只需删除所有文件migrations夹__pycache__、.pyc文件:
find . | grep -E "(__pycache__|\.pyc|\.pyo$|migrations)" | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)
然后,运行:
python manage.py makemigrations
python manage.py migrate
Run Code Online (Sandbox Code Playgroud)
当您对默认用户模型进行一些更改或通过抽象用户创建自定义用户模型时,很多时候您会遇到该错误
1:请记住,当我们创建超级用户时,我们需要用户名和密码才能登录,但如果您转换了 USERNAME_FIELD = 'email' 那么现在您无法使用用户名和密码登录,因为您的用户名字段已转换为电子邮件......
如果您尝试创建另一个超级用户,那么它不会要求用户名,它只会要求电子邮件和密码,然后在通过电子邮件和密码创建超级用户后,仅当您尝试登录管理面板时,它才会抛出该错误,因为有不需要任何用户名和用户名字段

2:这就是为什么在迁移过程中创建自定义用户模型后会抛出错误,因此为了解决它,首先添加 AUTH_USER_MODEL = 'appname.custommodelname' (appname 是您定义自定义用户模型的应用程序名称,自定义模型名称是3:然后删除您在其中创建自定义用户模型的应用程序的迁移文件夹,然后删除项目的数据库 db.sqlite3 4:现在运行迁移 python 管理。 py makemigrations appname(您定义自定义用户模型的应用程序名称) 5:然后通过 python manage.py migrate 迁移它 6:就是这样,现在完成了
| 归档时间: |
|
| 查看次数: |
42280 次 |
| 最近记录: |