Короткий ответ
Обе команды связаны с механизмом миграций — способом Django переносить изменения моделей в схему базы данных. makemigrations создаёт файлы миграций по изменениям моделей, а migrate применяет их к базе данных.
Как это работает подробнее
Процесс обычно выглядит так: изменили модель, сгенерировали файл миграции, затем применили его к схеме базы данных.
- Изменение моделей. После правки модели
makemigrationsсканирует приложение и формирует файл миграции с описанием будущих изменений. - Файлы миграций. Содержат инструкции, по сути близкие к SQL, но сами изменения к базе данных пока не применяют.
- Применение изменений.
migrateвыполняет инструкции из файлов и создаёт или обновляет таблицы в соответствии с моделями. - Версионирование. Миграции хранят историю изменений, поддерживают откат и должны лежать в системе контроля версий.
- Статус миграций. Служебная команда
showmigrationsпоказывает, какие миграции уже применены.
Пример кода
Рабочий цикл миграций
# после изменения моделей генерируем файл миграции
python manage.py makemigrations
# применяем миграции к базе данных
python manage.py migrate
# проверяем статус применённых миграций
python manage.py showmigrationsЧто использовать на практике
- Порядок команд. Сначала
makemigrationsдля генерации файла, затемmigrateдля реального изменения схемы. - Контроль версий. Храни файлы миграций в репозитории, чтобы вся команда применяла одинаковые изменения схемы.