小贴士
前文讲述的是循环于“找到方案-未生效”的极其吐血的过程,如果需要看解决方案请拉至最后。
事情经过
组内同事搭建了一个自动化测试平台,周末在家git clone下来瞅瞅,于是就按照以下步骤开始操作:
python manage.py makemigrations
嗯,报错了,查找原因为缺少数据库连接通信模块,于是去下载了对应版本的mysqlclient(这一步比较容易排查)。我以前用过django但是不知道为什么缺少这个模块。
好的,完毕之后这一步顺利了,开始下一步:
python make migrate
然而还是有问题:
不合法默认值.png
于是网上查找了一下解决方案,在stackoverflow上找到一篇相近的方案,大体意思是去django文档查询一下该字段的允许类型。发现CharField只要求max_lengt必填,其余不是必须。
实在是没辙,就去询问了该同事,按照指示去github拉取了dev分支,重复上述操作后依然报这个错。然后群里的大佬们纷纷支招:
- 把default值设置为空
- 把default值设置为英文
- 把MySql编码(my.ini文件下配置)默认设置为utf8
- 删除miagrations文件夹与数据库重新来一遍
- 换用sqlite3数据库(
???)
好吧,各位经验很丰富,但是并没有解决这个棘手的问题。
解决方案
群里沉默了一会儿,做平台的这位同事给出了一个解决方案,运行了如下命令:
python manage.py migrate --fake-initial
终于是生效了:
来之不易的一堆‘OK’.png
后记
解决了问题当然要知道为什么,然后就去网上询问这条命令的作用:
将初始化的迁移脚本标记为已映射
这是搜索“make migrate”报错得到的一些结果(我查询时搜索的是invalid default value),好吧,虽然报错不一样,但总算是解决了。不过目前对这个命令的理解还不是很深刻,之后在使用的过程中在慢慢加强。
网友评论