syncdb
не изменяет существующие таблицы в вашей базе данных, поэтому, если вы запустите это, а затем измените свою модель, ваша модель теперь не синхронизирована с таблицей, которую она представляет.Повторный запуск syncdb
не исправит это.
Вам либо нужно использовать что-то вроде south , чтобы выполнить миграцию, удалите таблицу из вашей БД, чтобы syncdb
воссоздала ее,или вручную запустите ALTER TABLE в вашей БД.
EDIT (более подробно)
Когда вы создаете подкласс Model
в models.py, он действует как представление таблицы базы данных, но не имеет автоматически таблицы базы данных.Вы получите это, запустив python manage.py syncdb
.Затем Django просматривает все ваши файлы models.py, генерирует SQL, необходимый для создания такой таблицы, и затем запускает ее в вашей базе данных.В результате вы получаете реальные таблицы базы данных, связанные с вашими моделями.
Однако syncdb
only создает таблиц.Это не меняет их.Таким образом, если вы перейдете и измените одну из своих моделей (добавьте поле, измените имя поля и т. Д.), На уровне базы данных ничего не произойдет.Повторный запуск syncdb
также не поможет, поскольку нет новых таблиц для создания.Вы должны каким-то образом получить таблицу, соответствующую модели, и наоборот, так что вот где ваши варианты:
Использовать Юг (ссылка выше).Юг позволяет вам создавать миграций , поэтому, когда вы что-то изменяете в своих моделях, вы можете запустить:
python manage.py schemamigration --auto yourapp
И он сгенерирует код, который изменит таблицу в соответствии с вашей моделью.Затем вам нужно только применить миграцию с:
python manage.py migrate yourapp
И все готово.Теперь таблица соответствует вашей модели, и все снова в мире.
Вы можете вручную удалить таблицу из своей базы данных.Вы не захотите делать это в производственной среде, потому что все данные в этой таблице будут сопровождаться этим, но в процессе разработки это не должно быть проблемой.После того, как таблица исчезла, вы можете выполнить:
python manage.py syncdb
Поскольку таблица больше не существует, Django создаст ее, но создаст на основе состояния вашей текущей модели.Итоговый результат одинаков, ваша модель и таблица соответствуют друг другу, поэтому вы можете продолжать.
Вы можете вручную изменить таблицу.Это требует, чтобы вы выяснили, какой SQL нужно применять, чтобы изменить таблицу в соответствии с вашей моделью.Вы запускаете этот SQL в своей базе данных, и тогда таблица находится в соответствии с моделью.
Дело в том, что каким-то образом вы должны обновить таблицу, чтобы отразить любые сделанные вами измененияк вашим моделям.Модель - это не таблица, а ее программное представление.