我刚刚将我的django从1.7.1升级到1.8.4。我试图运行django.db.utils.ProgrammingError: relation "django_content_type" does not exist
但是我收到了这个错误:
{{1}}
我删除了我的数据库,创建了一个新数据库,然后再次运行该命令。但我得到了同样的错误。我错过了什么吗?我是否需要做一些升级我的django的事情?
编辑: 我将其降级回1.7.1并且有效。有没有办法解决它1.8.4?
答案 0 :(得分:2)
从您的应用删除所有迁移文件夹并删除数据库,然后迁移您的数据库......
如果这不起作用,请从数据库中删除django_migration表,并在django_content_type表ALTER TABLE django_content_type ADD COLUMN name character varying(50) NOT NULL DEFAULT 'anyName';
中添加“name”列,然后运行$ python manage.py migrate --fake-initial
答案 1 :(得分:1)
好吧,我发现了这个问题。我已将auditlog
安装为我的应用程序。我删除了它,迁移工作正常。
答案 2 :(得分:1)
这是我发现/做的。我使用的是django 1.8.13和python 2.7。 Sqlite没有出现这个问题。它确实发生在PostgreSQL上。
我有一个使用GenericForeignKey的应用程序(依赖于Contenttypes)。我有另一个应用程序,其模型通过GenericForeignKey链接到第一个应用程序。如果我为这两个应用程序运行makemigrations,那么迁移就可以了。
答案 3 :(得分:0)
尝试从头开始迁移我们的模型时遇到了同样的问题(特别是在测试版本时)。经过进一步调查,我们发现我们有与ContentTypes
模型相关的自定义代码,该代码与django_content_type
表相关联:
staff_content_types = ContentType.objects.filter(model__in=ACCOUNT_STAFF_APPS)
然后,在我们将访问staff_content_types
变量的后续代码中,它将抛出django.db.utils.ProgrammingError: Table 'django_content_type' doesn't exist
消息。显然,它试图访问尚未构建的django_content_type
表。我们的代码基于我们的数据已经设置的上下文。
因此,至少有2种可行的解决方法。我们的想法是仅在我们的站点已有数据时(在迁移阶段之后)运行我们的自定义ContentType相关逻辑:
抓住迁移过程中发生的错误并忽略它:
from django.db.utils import ProgrammingError
try:
for content_type in staff_content_types:
# Our custom codes here.
except ProgrammingError:
pass
仅在django_content_type
表存在(迁移后的状态)时继续:
from django.db import connection
if 'django_content_type' in connection.introspection.table_names():
for content_type in staff_content_types:
# Our custom codes here.
同样,使用Django ContentType
对象/表的第三方应用程序可能会遇到类似的问题。因此,要么禁用它们,要么要求其作者使用此处建议的想法修补其贡献应用程序。
答案 4 :(得分:0)
我删除了数据库并重建了它,然后在 PyCharm 终端 py manage.py makemigrations
和 py manage.py migrate
中修复了这个问题。我想原因是django_content_type这个表是django的表,如果漏掉了就不能迁移,只好删除数据库重建。