【Django】make

问题

已有的model,修改之后,想重新建模,于是将migrations文件夹中除init.py之外其他文件都删掉,
再次执行以下步骤python manage.py makemigrations确认成功,执行python manage.py migrate,
提示No migrations to apply.
 
 

Migration记录


你是否有一个疑问:为什么只是将Models提交到数据库中,却要经历两个命令makemigrations和migrate?在makemigrations命令中,django做了什么呢?

实际上,只有在migrate命令中django才会将Model的改动提交给数据库,而在makemigrations命令中,django会将Model的改动写成一个py文件,存储在与model文件同目录的migrations文件夹下。

在migrate命令中,django不仅将Model的改动写入数据库,还会将migrate记录一并写入数据库下的django_migrations表中。

命令参考



python manage.py migrate app_name #指定迁移某个应用
#
python manage.py migrate app_name 000x #精确到迁移至某个(.py)文件
#
python manage.py makemigrations app_name #生成迁移文件

 

解决方案

方式一:(一般就可以解决问题)

1、python manage.py migrate --fake #使用这条命令

方式二:(参考别人的方式)

1、python manage.py dbshell 进到数据库中,执行delete from django_migrations where app='your_appname';
2、python manage.py makemigrations(若migrations文件未删除,可不执行这一步)
3、python manage.py migrate 或 python manage.py migrate --fake

方式三:亲测有用

在django_migrations表中,migrate执行完后会自动添加最后一个。如,init0001。这是系统一个机制,防止重复执行。
即:makemigrations会生成一个migrations文件,执行migrate会执行里面的变更,并把这个执行记录放入到django_migrations表中

在django_migrations表中对应的项目删除即可。就可以重新执行。

 

posted @ 2022-07-13 15:43  王广元  阅读(76)  评论(0编辑  收藏  举报
分享到: