Django syncdb и обновленная модель

Недавно я обновил свою модель, добавив к ней BooleanField, но когда я делаю python manage.py syncdb, он не добавляет новое поле в базу данных для модели. Как я могу это исправить?

Ответ 1

Начиная с Django 1.7 и далее

Django поддерживает миграцию - посмотрите документацию.

Для Django 1.6 и ранее

Django не поддерживает миграции из коробки. В Django есть подключаемое приложение, которое работает именно так, и это отлично работает. Он называется South.

Ответ 2

В настоящее время Django не делает это автоматически. Ваши варианты:

  • Отбросьте таблицу из базы данных, а затем заново создайте ее в новой форме с помощью syncdb.
  • Распечатайте SQL для базы данных с помощью python manage.py sql (appname), найдите добавленную строку для поля и добавьте ее вручную, используя команду alter table SQL. (Это также позволит вам выбрать значения поля для ваших текущих записей.)
  • Используйте South (за ответ Dominic).

Ответ 3

Выполните следующие действия:

  • Экспортируйте свои данные в прибор, используя команду dumpdata
  • Отбросьте таблицу
  • Запустить syncdb
  • Перезагрузите данные из прибора, используя команду loaddata

Ответ 4

Как было предложено в верхнем ответе, я попытался использовать South и после часа разочарования неясные ошибки миграции решил пойти вместо Django Evolution.

Мне кажется, что легче начать работу с Юга, и он отлично работал в первый раз, когда я набрал ./manage.py evolve --hint --execute, поэтому я доволен этим.

Ответ 5

Havent использовал django в то время, но я, похоже, помню, что syncdb выполняет команды alter на таблицах db. вам нужно отбросить таблицу и снова запустить ее, и она снова будет создана.

edit: извините НЕ выполняет alter.

Ответ 6

Если вы запускаете Django с Apache и MySQL, перезапустите apache после миграции с помощью makemigrations.

Ответ 7

В django 1.6

  • Сначала мы выполнили - python manage.py sql <app name>

  • Затем нам нужно запустить - python manage.py syncdb