Detect backward incompatible migrations for your Django project. It will save you time by making sure migrations will not break with a older codebase.
pip install django-migration-linter
And add the migration linter your INSTALLED_APPS
:
INSTALLED_APPS = [
...,
"django_migration_linter",
...,
]
$ python manage.py lintmigrations
(app_add_not_null_column, 0001_create_table)... OK
(app_add_not_null_column, 0002_add_new_not_null_field)... ERR
NOT NULL constraint on columns
(app_drop_table, 0001_initial)... OK
(app_drop_table, 0002_delete_a)... ERR
DROPPING table
(app_ignore_migration, 0001_initial)... OK
(app_ignore_migration, 0002_ignore_migration)... IGNORE
(app_rename_table, 0001_initial)... OK
(app_rename_table, 0002_auto_20190414_1500)... ERR
RENAMING tables
*** Summary:
Valid migrations: 4/8 - erroneous migrations: 3/8 - ignored migrations: 1/8
The linter analysed all migrations from the Django project. It found 3 migrations that are doing backward incompatible operations and 1 that is explicitly ignored. The list of incompatibilities that the linter analyses can be found at docs/incompatibilities.md.
More advanced usages of the linter and options can be found at docs/usage.md.
Please find more documentation generally in the docs/ folder.
Some implementation details can found in the ./docs/internals/ folder.
Keeping Django database migrations backward compatible
django-migration-linter is released under the Apache 2.0 License.