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} zero
for each app.- Remove old migration files, as new migrations is going to be generated.
makemigrations
to generate initial migration file.migrate --fake-initial
to 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-zeromigrations
Then 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).