As the project grows up, the number of migration files increases over time. As a result, running them can consume a lot of time, specifically when you are running your tests.
zeromigrations is a command to reset migration files. It basically runs 4 commands:
migrate --fake {app_name} zerofor each app.- Remove old migration files, as new migrations is going to be generated.
makemigrationsto generate initial migration file.migrate --fake-initialto fake generated initial files.
But besides that, this command can make a backup to restore in case of any failure.
Note that migrate --fake command only runs for your own apps and
django apps like contenttype and third-party apps are excluded.
First install the package:
pip3 install django-zeromigrationsThen add it to your INSTALLED_APPS:
INSTALLED_APPS = [
...
"zero_migrations"
]First, run the command:
python manage.py zeromigrations --backup-path=<YOUR_PATH> I suggest to make a backups from both your migrations and django_migrations table (just in case). 1- make backup 2- restore last backup 3- just proceed
If you choose 1- make backup, it would make a backup then zero
migrations.
If you choose 2- restore last backup, it tries to restore the latest
backup that can be found. If not backup found, it would raise an error.
If you choose 3- just proceed, it assumes that you already have your
own backup and start setting migrations zero.
--backup-path: The absolute path of the dir that you want to store backups in. It should have --backup-path=<PATH> format. The default path is inside of zeromigrations app dir.--use-fake-zero: By default, deleting migrations records from DB happens directly using ORM. With this flag, you can set to use python3 manage.py migrate app --fake zero (note that it has performance issue).