首页 > 解决方案 > 为 django 2.2 升级 django-synchro:OperationalError - 没有这样的表:django_content_type"

问题描述

我正在尝试将 django-synchro 升级到 django 2.2。我已经将项目升级到 django 2.1 但我现在遇到了 ContentType 对象的问题

django 2.1 的升级版本可以在这里找到

(python runtests.py 有效,所有测试通过)

使用 django 2.2.3 我有错误

django.db.utils.OperationalError:没有这样的表:django_content_type

似乎在初始化时,迁移是在默认数据库上完成的,其余的是在测试数据库(在内存中)上完成的。所以 ContentType 在其余代码中看不到。models.py读取 时发生错误(content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE))

任何想法将不胜感激......

我查看了Django 2.2 发行说明

2.2 中有两个向后不兼容的更改可能会导致错误:

TransactionTestCase 序列化数据加载:在数据库刷新后,测试结束时将初始数据迁移加载到 TransactionTestCase 中。在旧版本中,此数据在测试开始时加载,但这会阻止 test --keepdb 选项正常工作(整个测试套件结束时数据库为空)。除非您自定义了 TransactionTestCase 的内部结构,否则此更改不会对您的测试产生影响。

测试:现在在 SQLite 3.20+ 上的每个 TestCase 测试结束时检查可延迟数据库约束,就像在支持可延迟约束的其他后端一样。这些检查不适用于旧版本的 SQLite,因为它们需要在那里进行昂贵的表内省。

标签: django-2.2

解决方案


对我来说,这是Django 2.2 发行说明中的​​注释

如果没有迁移的应用程序与有迁移的应用程序有关系,则 SQLite 上的测试将失败。自从在 Django 1.7 中添加迁移以来,这一直是一个记录限制,但现在它更可靠地失败了。您会看到测试失败并出现类似 no such table: _. 在几个第三方应用程序中观察到了这种情况,这些应用程序在没有迁移的情况下测试了模型。您必须为此类模型添加迁移。

我不确定错误消息是否特别有用。但是一轮升级并检查我周围没有真正旧的 django 模块似乎可以解决它。


推荐阅读