微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django makemigrations KeyError: 'content_type' 问题与数据库无关迁移的一般故障排除:

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?