2017-02-23 53 views

回答

2

它曾經在作者的「引擎蓋下的django」會議上解釋過。我有一個總結:http://reinout.vanrees.org/weblog/2014/11/14/2migrations.html

它的工作方式是將所有操作切成微小的依賴關係。每個必須創建的單個字段都變成了一個微小的依賴性步驟。在將步驟列表(通過依賴關係解析循環)分類到正確的步驟列表後,優化器遍歷列表並優化它。例如,如果模型被創建和刪除,則不需要做任何事情。

拼圖的最後部分是圖形。它構建了一個有關內存中所有基本遷移的有向圖。它需要讀取磁盤上的所有模型。它也在數據庫中查找。在那裏有一個表格標記哪個遷移(或者說遷移圖中的節點)已經被應用。

如果你想看看代碼,這裏有一些指針:

  • django/db/migrations/autodetector.py,開始在_detect_changes()
  • django/db/migrations/optimizer.py,開始在減少()
  • django/db/migrations/graph.py
  • django/db/migrations/loader.py
+0

**編者提示**:這個答案最初只是第一段wi鏈接。當兩分鐘後我添加了答案的其餘部分時,它已經下調了兩次。對不起,一次不提交答案。 –

+0

謝謝@Reinout van Rees – Prafulla