升级Django从1.3到1.4.3后,Syncdb无法删除过时的内容类型
我该如何成功删除过时的内容?
输入“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这个表是否存在。如果没有的话,我想你可以手动创建一个,然后再试一次。