Как вы работаете с миграциями в команде
Вопрос
Как устроена работа с миграциями в вашей команде: создание, ревью, применение?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Миграции генерируются и коммитятся вместе с изменением моделей
Ревью сгенерированного кода и 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 ошибок.