Ответ вслух Junior Миграции обновлено

Как вы работаете с миграциями в команде

Вопрос

Как устроена работа с миграциями в вашей команде: создание, ревью, применение?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «Изменил модель, сразу генерирую миграцию и коммичу её в том же PR. На ревью смотрим не только Python-файл, но и SQL через sqlmigrate, особенно для больших таблиц: нет ли блокирующих операций.

Что должно прозвучать в ответе

  • Миграции генерируются и коммитятся вместе с изменением моделей

  • Ревью сгенерированного кода и SQL (`sqlmigrate`)

  • Не редактировать применённые миграции, новые изменения новыми миграциями

  • Конфликты: merge-миграция или пересоздание в своей ветке

  • Применение в CI и при деплое автоматически, проверка `makemigrations --check`

  • Миграции данных отдельно, с обратной операцией

Что могут спросить следом

  • Что проверяет makemigrations --check?
  • Что будет, если отредактировать уже применённую миграцию?

Разбор

Образцовый ответ: «Изменил модель, сразу генерирую миграцию и коммичу её в том же PR. На ревью смотрим не только Python-файл, но и SQL через sqlmigrate, особенно для больших таблиц: нет ли блокирующих операций. Применённые где-либо миграции не редактируем: база уже в этом состоянии, и правка разведёт окружения; любое исправление это новая миграция. Если после слияния веток появился конфликт номеров, делаю makemigrations --merge, а если ветка ещё моя, просто пересоздаю миграцию поверх свежего main. В CI запускаем makemigrations --check --dry-run, чтобы не забыть миграцию к изменённой модели, и прогоняем тесты на чистой базе со всеми миграциями. На деплое миграции применяются автоматически отдельным шагом перед запуском нового кода. Миграции данных пишу отдельно, через apps.get_model и с обратной функцией или явным noop».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.