In a nutshell it allows you to keep DB functions, triggers and views around as Python classes, so you can version them together with the rest of your application code. The DB state gets updated for you (in the right dependency order) whenever you change them.
Comments
One of my pet projects addresses these points you raise about Django + migrations, have a look:
https://pypi.org/project/DBSamizdat
In a nutshell it allows you to keep DB functions, triggers and views around as Python classes, so you can version them together with the rest of your application code. The DB state gets updated for you (in the right dependency order) whenever you change them.
It can also run without Django.
This is exactly what I would use dbt for