小貼士
前文講述的是循環(huán)于“找到方案-未生效”的極其吐血的過程,如果需要看解決方案請拉至最后抓狭。
事情經(jīng)過
組內(nèi)同事搭建了一個自動化測試平臺,周末在家git clone下來瞅瞅檩坚,于是就按照以下步驟開始操作:
python manage.py makemigrations
嗯肌括,報錯了,查找原因為缺少數(shù)據(jù)庫連接通信模塊泛范,于是去下載了對應版本的mysqlclient(這一步比較容易排查)让虐。我以前用過django但是不知道為什么缺少這個模塊。
好的罢荡,完畢之后這一步順利了赡突,開始下一步:
python make migrate
然而還是有問題:
于是網(wǎng)上查找了一下解決方案对扶,在stackoverflow上找到一篇相近的方案,大體意思是去django文檔查詢一下該字段的允許類型惭缰。發(fā)現(xiàn)CharField只要求max_lengt必填浪南,其余不是必須。
實在是沒轍漱受,就去詢問了該同事络凿,按照指示去github拉取了dev分支,重復上述操作后依然報這個錯昂羡。然后群里的大佬們紛紛支招:
- 把default值設置為空
- 把default值設置為英文
- 把MySql編碼(my.ini文件下配置)默認設置為utf8
- 刪除miagrations文件夾與數(shù)據(jù)庫重新來一遍
- 換用sqlite3數(shù)據(jù)庫(
絮记??虐先?)
好吧怨愤,各位經(jīng)驗很豐富,但是并沒有解決這個棘手的問題蛹批。
解決方案
群里沉默了一會兒撰洗,做平臺的這位同事給出了一個解決方案,運行了如下命令:
python manage.py migrate --fake-initial
終于是生效了:
后記
解決了問題當然要知道為什么般眉,然后就去網(wǎng)上詢問這條命令的作用:
將初始化的遷移腳本標記為已映射
這是搜索“make migrate”報錯得到的一些結果(我查詢時搜索的是invalid default value)了赵,好吧潜支,雖然報錯不一樣甸赃,但總算是解決了。不過目前對這個命令的理解還不是很深刻冗酿,之后在使用的過程中在慢慢加強埠对。