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

时间:2013-01-28 12:27:23

标签: python django content-type syncdb

如何成功删除陈旧内容?
输入yes会产生以下结果:

Creating tables ...

以下内容类型陈旧且需要删除:

auth | message

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

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 个答案:

答案 0 :(得分:2)

你可以做一个

python manage.py dbshell

并检查之前创建的所有表格。

查看是否存在 auth_group_permissions 。如果它不存在,我猜你可以手动创建它并再次执行该过程。

答案 1 :(得分:1)

model的内容类型的auth.message字段为'message'而不是'messages'
所以试试

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

然后,您可以列出ct.permission_set.all()或甚至运行ct.delete()(在事务和打印相关对象中删除)以重现该问题。

另外,关于'丢失表'的错误很奇怪,你可以在DB中检查表是否真的存在?或者您在1.3中配置了多个DB?