После обновления Django с 1.3 до 1.4.3 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.

person nu everest    schedule 28.01.2013    source источник


Ответы (2)


Вы можете сделать

python manage.py dbshell

и проверьте все таблицы, созданные вами ранее.

Проверьте, существуют ли auth_group_permissions. Если его там нет, я думаю, вы можете создать его вручную и повторить процесс.

person Brandon Gao    schedule 28.01.2013
comment
auth_group_permissions не существует в базе данных. Как создать вручную? - person nu everest; 01.02.2013
comment
Проблема оказалась в базе данных. Каким-то образом auth_group_permissions упал... Поэтому я создал новую базу данных. Я создал новый проект django. Запустил синхронизацию. Затем я выполнил следующие команды под MYSQL как root USE ‹live_project_db›; СОЗДАТЬ ТАБЛИЦУ auth_group_permissions LIKE ‹new_db›.auth_group_permissions; - person nu everest; 01.02.2013

Поле model типа содержимого auth.message равно 'message' вместо 'messages'.
попробуйте

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

Затем вы можете перечислить ct.permission_set.all() или даже запустить ct.delete() (в транзакции и распечатать соответствующие объекты, которые нужно удалить), чтобы воспроизвести проблему.

Кроме того, ошибка об «отсутствующей таблице» странная, можете ли вы проверить в БД, действительно ли таблица существует? Или у вас есть несколько БД, настроенных в 1.3?

person okm    schedule 28.01.2013
comment
Хороший улов на моей опечатке. Однако, когда я запускаю ct.delete(), я все равно получаю ошибку DatabaseError: (1146, таблица '‹db_name›.auth_group_permissions' не существует). Оказалось, что этой таблицы не существует, когда я просмотрел свою базу данных, но я не знаю, как ее создать. - person nu everest; 01.02.2013
comment
Когда я запускаю ct.permission_set.all(), я получаю: [‹Permission: auth | сообщение | Можно добавить сообщение›, ‹Разрешение: авторизация | сообщение | Можно изменить сообщение›, ‹Разрешение: авторизация | сообщение | Можно удалить сообщение›] - person nu everest; 01.02.2013
comment
У меня есть только одна база данных. Однако у меня есть два отдельных проекта, которые совместно используют базу данных. Проекты не используют одни и те же таблицы. - person nu everest; 01.02.2013
comment
@nueverest, хорошо, что ты решил это. Не забудьте сделать резервную копию важных данных, когда вам нужно вручную управлять БД. На локальном хосте вы можете безопасно удалять и перестраивать таблицы или всю БД. - person okm; 02.02.2013