之前因為要換現有的資料庫做開發,但碰到ProgrammingError的狀況,一查才知道要變更資料庫,可不是憨人想得這麼簡單!
一、砍掉重練
python manage.py makemigrations
python manage.py migrate
但採取這種方式就沒法保留資料庫的資料,應該不是大家最樂意的方法。
二、保留原有資料
--fake
原則上如果先手動更改資料庫的資料,爾後才去更改models.py,Django是會報錯的,因為手動改好的資料庫跟Django的紀錄並不符合,變成相當複雜的情況。不過還好Django有提供一個方法來處理這種情況:
python manage.py migrate --fake quiz
記得昨天執行完migrate後,postgresql同時新增了兩個工作表,這是完整的流程,而fake的作用就是,我們同樣告訴Django我們要做資料遷移migrate,可是我們其實並沒有要更動資料庫,但如果要更動資料模型,你就是得執行migrate,所以用fake假的資料遷移動作,繞過Django這個規則來執行命令。
--fake-initial
另一種作法,透過重置資料模型修改的紀錄,讓紀錄回到0001_initial.py。
python manage.py migrate --fake-initial quiz
小結:fake跟fake-initial兩者使用的時機對我而言還是有點模糊,今天時間不多(加完班回到家已經8點多QQ),明天直接實作分別看效用為何。