昨天我們看到了django中的migrations是用graph的方式去存取,在造graph的時候也跑了一些function去驗證graph的一些特性,那~今天我們就繼續往下看看migrate接下來的過程吧!
executor init後會跑一個去驗證graph和migration的一致性
接下來會去檢查衝突
他會去檢查graph中的葉節點是否有重複
有的話就會報錯~
接著往下會去看python manage.py migrate
的時候有沒有其他的參數,那我這邊都沒給參數所以會是這個
會把所有葉節點指向targets
接著中間有一段也是檢查有無而外參數,我們跳過到
這邊
生出一個migration plan
其中大部分都會流向
而當中的forwards_plan呢又做了什麼事
會去把該target相關依賴依據DFS深度優先搜尋找出來
把相關不存在applied的migration都加到plan中
接著往下
這邊我們先跳過,因為我還沒搞清楚XD,他有pre和post都會丟signal給db,明天好好研究!
但_create_project_state
先來看看
這邊先記錄一下,不太清楚migration.mutate_state()
這一段在做什麼!?
再往下
其中MigrationAutodetector
會去比較兩邊的ProjectState
看看兩邊有無改變,如果有會說明要如何解決~
最後會才會進入migrate,不過今天就先到這邊吧!剩下的我們明天繼續!
今天這樣看著看著當中有些地方看一兩遍其實還是沒有很清楚,需要再花一點時間去了解整體架構和一些python的lib用法!
尚未了解事項:
之後再找時間補起來!