Ответ
Очередность применения миграций в Django строго определена и критически важна для целостности схемы базы данных. Django использует комбинацию двух механизмов:
- Лексикографический порядок имен файлов. Каждая миграция получает префикс-номер (
0001_,0002_и т.д.), который задает базовую последовательность. - Явные зависимости. Внутри каждого файла миграции есть поле
dependencies, которое точно указывает, какие миграции должны быть выполнены до текущей. Это ключевой механизм для корректной работы в условиях ветвления и слияния в системах контроля версий.
Для отслеживания уже примененных миграций Django использует служебную таблицу в базе данных — django_migrations.
Пример файла миграции (0002_add_price.py):
# Generated by Django 4.1.7 on 2023-03-15 10:00
from django.db import migrations, models
class Migration(migrations.Migration):
# Эта миграция зависит от выполнения '0001_initial'
dependencies = [
('shop', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='product',
name='price',
field=models.DecimalField(decimal_places=2, default=0, max_digits=10),
),
]
Важные правила:
- Никогда не редактируйте файлы миграций и их зависимости вручную после их создания и применения.
- При работе в команде и возникновении конфликтов (две миграции с одинаковым номером) используйте команду
python manage.py makemigrations --mergeдля их разрешения. - Команда
python manage.py migrateавтоматически определяет правильный порядок и применяет только недостающие миграции.