小贴士

前文讲述的是循环于“找到方案-未生效”的极其吐血的过程,如果需要看解决方案请拉至最后。


事情经过

组内同事搭建了一个自动化测试平台,周末在家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),好吧,虽然报错不一样,但总算是解决了。不过目前对这个命令的理解还不是很深刻,之后在使用的过程中在慢慢加强。

文章来源于互联网,如有雷同请联系站长删除:django之make migrate报错invalid default value

发表评论