Недавно я обновил свою модель, добавив к ней BooleanField, но когда я делаю python manage.py syncdb
, он не добавляет новое поле в базу данных для модели. Как я могу это исправить?
Django 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
Выполните следующие действия:
Ответ 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