David-Wobrock/django-migration-linter
David-Wobrock/django-migration-linter has 623 GitHub stars and 68 forks. GitHot measured +1 stars in 24 hours and 0 in 7 days. Last checked 2026-11-11 19:16 UTC. Last push 2026-10-19.
:rocket: Detect backward incompatible migrations for your django project
Measured star growth
- in 24h
- +1
- in 7 days
- 0
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
OriginalDjango migration linter
Detect backward incompatible migrations for your Django project. It will save you time by making sure migrations will not break with a older codebase.
Quick installation
pip install django-migration-linter
And add the migration linter to your INSTALLED_APPS:
INSTALLED_APPS = [
...,
"django_migration_linter",
...,
]
Optionally, add a configuration:
MIGRATION_LINTER_OPTIONS = {
...
}
For details about configuration options, checkout Usage.
Usage example
$ 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
Migrations with warnings: 0/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.
Integration
One can either integrate the linter in the CI using its lintmigrations command, or detect incompatibilities during generation of migrations with
$ python manage.py makemigrations --lint
Migrations for 'app_correct':
tests/test_project/app_correct/migrations/0003_a_column.py
- Add field column to a
Linting for 'app_correct':
(app_correct, 0003_a_column)... ERR
NOT NULL constraint on columns
The migration linter detected that this migration is not backward compatible.
- If you keep the migration, you will want to fix the issue or ignore the migration.
- By default, the newly created migration file will be deleted.
Do you want to keep the migration? [y/N] n
Deleted tests/test_project/app_correct/migrations/0003_a_column.py
The linter found that the newly created migration is not backward compatible and deleted the file after confirmation.
This behaviour can be the default of the makemigrations command through the MIGRATION_LINTER_OVERRIDE_MAKEMIGRATIONS Django setting.
Find out more about the makemigrations command at docs/makemigrations.md.
More information
Please find more documentation in the docs/ folder.
Some implementation details can be found in the ./docs/internals/ folder.
Blog post
They talk about the linter
Related
- django-test-migrations - Test django schema and data migrations, including migrations' order and best practices.
License
django-migration-linter is released under the Apache 2.0 License.
Maintained by David.
Created originally at 3YOURMIND.
Explore related projects
Asabeneh/30-Days-Of-Python
The 30 Days of Python programming challenge is a step-by-step guide to learn the Python programming language in 30 days. This challenge may take more than 100 days. Follow your own pace. These videos may help too: https://www.youtube.com/channel/UC7PNRuno1rzYPb1xLa4yktw
78,560 starsgrafana/grafana
The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
77,830 starsredis/redis
For developers, who are building real-time data-driven applications, Redis is the preferred, fastest, and most feature-rich cache, data structure server, and document and vector query engine.
77,395 starsapache/superset
Apache Superset is a Data Visualization and Data Exploration Platform
75,473 stars