前言

昨天我們看到了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用法!
尚未了解事項:

  • signal
  • migration.mutate_state

    之後再找時間補起來!