现象
在models和数据库完全一致的情况下,执行如下代码时,却产生了新的migrations文件。而且每执行一次均会产生新的文件。
python manage.py makemigrations
原因在于运行缓存__pycache__文件与migrations文件不匹配。
按以下步骤操作,就可以消除此现象。
1.删除工程相关app下的__pycache__。
楼主执行的比较彻底,所以删除了工程下全部的缓存文件,但应该只要删除目标相关文件夹下的缓存文件即可。
执行到此步骤后,可以尝试执行python manage.py makemigrations,观察有没有继续生成新文件,如果没有生成。则以下步骤均不必执行,问题已经解决。
如果依然出现,则再删除一遍刚生成的__pycache__。
2.删除相关app下的migrations文件夹。
此操作要慎重,尤其是如果各app间有互相引用关系时,删migrations文件可能会导致,引用app找不到依赖文件而报错。
如果出现这种情况,只能一直删下去了,把所有相关的migrations全部删除。
3.重新在app中生成migrations文件。
python manage.py makemigrations appname
python manage.py migrate --fake #一定要加--fake
至此问题即可得到解决。
注意
如果以上三步之后问题依然存在,则只能全工程删除__pycache__和migrations文件夹,然后重复执行上述三步,问题一定可以解决的。