django之manage.py migrate无效的问题
问题
已有的model,迁移之后,想重新设置字段,于是将migrations
文件夹中除__init__.py
之外其他文件都删掉,并且把数据库中的表删除,再次执行以下步骤python manage.py makemigrations
确认成功,执行python manage.py migrate
,提示No migrations to apply
.无法对表模型进行更改。
解决方案
python manage.py dbshell
进到数据库中,执行delete from django_migrations where app='your_appname';
python manage.py makemigrations
python manage.py migrate
好啦,大功告成
扩展
执行python manage.py migrate
之后,可以使用python manage.py sqlmigrate appname migrations_num
(例如python manage.py sqlmigrate user 0001
)查看当前migrations文件对应的sql语句。
另外,在使用上述命令查看0001文件的sql语句时发现,Django会新建一个表user_new,然后插入user表中的数据,再把user表删掉,再把user_new重命名为user。所以,修改model的时候,不必担心原有数据会丢失。