升级Django从1.3到1.4.3后,Syncdb无法删除过时的内容类型

0 投票
2 回答
827 浏览
提问于 2025-04-17 13:55

我该如何成功删除过时的内容?
输入“yes”后出现以下内容:

Creating tables ...

以下内容类型是过时的,需要被删除:

auth | message

与这些内容类型通过外键相关的任何对象也会被删除。你确定要删除这些内容类型吗?如果不确定,请回答“no”。

Type 'yes' to continue, or 'no' to cancel: yes

错误追踪(最近的调用在最前面):
...

raise errorclass, errorvalue
django.db.utils.DatabaseError: 
(1146, "Table '<db_name>.auth_group_permissions' doesn't exist")
Process finished with exit code 1

我尝试的另一件事是:

from django.contrib.contenttypes.models import ContentType
ct = ContentType.objects.get(app_label='auth',model='messages')

然后我收到了以下内容:

DoesNotExist: ContentType matching query does not exist.

2 个回答

1

auth.message 的内容类型中,model 字段是 'message',而不是 'messages'
所以你可以试试这个:

ct = ContentType.objects.get(app_label='auth',model='message')

然后你可以列出 ct.permission_set.all(),或者甚至运行 ct.delete()(在事务中,并打印出要删除的相关对象)来重现这个问题。

另外,关于“缺少表”的错误有点奇怪,你能检查一下数据库里这个表是否真的存在吗?或者你在1.3版本中配置了多个数据库吗?

2

你可以这样做:

python manage.py dbshell

然后查看一下你之前创建的所有表。

看看auth_group_permissions这个表是否存在。如果没有的话,我想你可以手动创建一个,然后再试一次。

撰写回答