2017-02-23 53 views

ответ

2

Об этом однажды говорилось на конференции автора «django under the hood». У меня есть сводка этого: 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