如何解决Django makemigrations KeyError: 'content_type' 问题与数据库无关迁移的一般故障排除:
上次我在本地更改数据模型并尝试将其推送到生产环境并在那里迁移数据库时,我从 DF <- expand.grid(X,Y)
DF$Z <- sin(DF$Var1) + cos(DF$Var2)
Z <- matrix(DF$Z,nrow = 32)
plot_ly(y = ~Y,x = ~X,z=~Z) %>%
add_surface()
命令得到以下响应:
makemigrations
现在我无法向前或向后移动,并且被服务器上的当前数据模型卡住了。 我可以以某种方式从生产服务器中删除所有旧的迁移文件,然后从当前数据库中重新开始清理吗?
老实说,我不太确定这个错误是什么意思
很高兴提供更多信息,因为我也不知道从哪里开始。
解决方法
问题与数据库无关
如果您在回溯中看到以下行
pre_migrate_state = executor._create_project_state(...)
它甚至与数据库后端的类型(sqlite3 vs MySQL vs PostgreSQL)无关,而是与项目的代码有关。然后您可以重现问题并首先在另一个开发虚拟 Python 环境中安全地解决问题,您可以从一个空数据库开始。也许所有代码都不完全相同(存储库未跟踪的文件?)或者迁移是在比生产中运行的更高的 Django 版本中创建的(例如 3.2.x 与 3.1.x)或 INSTALLED_APPS 不同,或者您过早删除了某些迁移仍在使用的一些未使用的代码部分。
迁移的一般故障排除:
运行命令 python manage.py showmigrations
以查看所有未应用的迁移。 (您也可以将它与开发机器上的相同列表进行比较。这可能会揭示例如不兼容的配置。)
运行命令 python manage.py migrate --plan
以查看简单信息,第一次失败的未应用迁移的内容是什么。阅读第一行。示例:
Planned operations:
example.0003_auto_20210714_2108
Add field foo_field to my_model
Add field bar_field to my_model
通过某些数据库管理应用程序验证尚未应用第一个命令(例如未添加“foo_field”)以确保数据库状态仍然一致。
将开发机器上有问题的迁移拆分为两个或多个较小的迁移:
删除迁移文件(通过将其移动到某个备份)
猜猜什么是有问题的更改,这很简单。 (它正在删除您的案例中的字段“content_type”或删除使用 content_type 的 GenericForeignKey 以及它可能使用的内容。)恢复 models.py 中所有有问题的更改,运行“manage.py check”并运行“ manage.py makemigrations”。一一应用其他有问题的更改,并在每次更改后运行 check 和 makemigrations。在开发过程中尝试这些向前和向后迁移。由他们替换生产中存在问题的未应用大迁移。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。