Django: команда flush не полностью очищает базу данных, сбой сброса - PullRequest
8 голосов
/ 29 декабря 2010

Я переписал многие из своих моделей, и, поскольку я просто запускаю тестовый сервер, я делаю ./manage.py сбросьте myapp для сброса таблиц БД, и все работает нормально.

Но я попытался сделать это на этот раз, и я получаю ошибку,

«Полная ошибка: контрольная точка owner_id_refs_id_9036cedd» отношения «myapp_tagger» не существует »

Так что я подумал, что могу просто взорвать весь сайт и начать все заново. Так что я сделал ./manage.py flush, затем сделал syncdb, это не вызвало ошибки и удалило все мои данные, однако он не обновил базу данных, так как, когда я пытаюсь получить доступ к любому из объектов my_app, я получаю ошибку столбца не найдена , Я думал, что флеш должен был сбросить все столы. Syncdb сказал, что никакие приборы не были добавлены.

Я предполагаю, что ошибка связана с тем фактом, что я изменил модель тегера на использование иностранного ключа с владельцем имени, привязанным к другому объекту.

Я попытался добавить related_name к аргументам foreignkey, но ничего не работает.

1 Ответ

13 голосов
/ 29 декабря 2010

Я думал, что flush должен был отбросить все столы.

Нет.Согласно документации , manage.py flush не удаляет таблицы.Вместо этого он делает следующее:

Возвращает базу данных в состояние, в котором она находилась сразу после выполнения syncdb.Это означает, что все данные будут удалены из базы данных, все обработчики пост-синхронизации будут перезапущены, а фиксация initial_data будет переустановлена.

Как указано в главе 10книги Django в разделе «Внесение изменений в схему базы данных»,

syncdb просто создает таблицы, которых еще нет в вашей базе данных - он не синхронизирует изменения вмодели или выполнить удаление моделей.Если вы добавляете или изменяете поле модели или удаляете модель, вам нужно внести изменения в базу данных вручную.

Поэтому для решения вашей проблемы вам потребуется:

  1. Удалите базу данных и повторите запрос manage.py syncdb.Это процесс, который я использую, когда все еще разрабатываю схему базы данных.Я использую приспособление initial_data для установки некоторых тестовых данных, которые также необходимо обновить при изменении схемы базы данных.
  2. Вручную введите команды SQL для изменения схемы базы данных.
  3. Используйте Юг .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...