Django does not use database-level DEFAULTs.
Instead, Django handles the default model field option at the application level — not the database level.
"Django never sets database defaults and always applies them in the Django ORM code."
When adding a new non-nullable column to an existing table, relational databases require a default value for this new column in order to perform the ALTER TABLE ... ADD COLUMN operation.
In Django, makemigrations will attempt to infer the correct default value from the application-level default option on the field, when available. If a default option isn't available on the field, then Django halts makemigrations and prompts for a default value in the command line before proceeding. In each of these cases, the DEFAULT constraint is applied (again, using the application-level value — not the database-level value), and then it's removed.