Referencia: https://docs.djangoproject.com/en/3.0/topics/migrations/#squashing-migrations
- Generar la nueva migración
python manage.py squashmigrations nombre_app num_migracion (También puede ser el nombre)
python manage.py squashmigrations users 0004
git add + commit
de la nueva migración creada- Probar que la migración funciona correctamente (#CircularDependencyError)
- Por último, Django recomienda hacer la transición de la squashed migration a una migración normal. Para esto deberemos:
-
Borrar las migraciones reemplazadas.
-
Actualizar las migraciones que dependen de alguna de las migraciones reemplazadas.
Por ejemplo, si en mi app gestion hice un squash de las migraciones 0001 a 0006 ahora tendré una nueva llamada
0001_squashed_0006.py
.En mi caso, al tener la migración 0007 que dependía de la 0003, la cual fue squasheada, deberé actualizar la migración 0007
0007.py
class Migration(migrations.Migration): # Ahora depende de la nueva migración +dependencies = [("gestion", "0001_squashed_0006")] -dependencies = [("gestion", "0006")]
-
Borrar la lista
replaces
de la nueva migración creada.0001_squashed_0006.py
class Migration(migrations.Migration): replaces = [ ("gestion", "0001"), ("gestion", "0002"), ("gestion", "0003"), ("gestion", "0004"), ("gestion", "0005"), ("gestion", "0006"), ]
-
Puede que Django nos notifique que no encuentra una de las migraciones reemplazadas.
```bash
django.db.migrations.exceptions.NodeNotFoundError:
Migration gestion.0007 dependencies reference nonexistent
parent node ('gestion', '0006')
```
raise CircularDependencyError(", ".join("%s.%s" % n for n in cycle))
django.db.migrations.exceptions.CircularDependencyError:
gestion.0001_squashed_0010_auto_20191101_1616,
clientes.0001_squashed_0004_auto_20191101_1227