#36016: Avoid traceback when quitting makemigrations with Ctrl-C
------------------------------+---------------------------------------
Reporter: Adam Johnson | Type: New feature
Status: new | Component: Migrations
Version: dev | Severity: Normal
Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
------------------------------+---------------------------------------
Sometimes `makemigration` asks you questions with its “questioner”. If you
realize that you missed something due to these questions, you might want
to quit with Ctrl-C and edit your models file before rerunning.
Currently, such a quit triggers Python’s default traceback:
{{{
$ ./manage.py makemigrations example
It is impossible to add a non-nullable field 'title' to book without
specifying a default. This is because the database needs something to
populate existing rows.
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a
null value for this column)
2) Quit and manually define a default value in models.py.
Select an option: ^CTraceback (most recent call last):
File "/.../manage.py", line 21, in <module>
main()
~~~~^^
File "/.../django/db/migrations/questioner.py", line 169, in
ask_not_null_addition
choice = self._choice_input(
f"It is impossible to add a non-nullable field '{field_name}' "
...<10 lines>...
],
)
File "/Users/chainz/tmp/django-makemigrations-
ctrl-c/.venv/lib/python3.13/site-
packages/django/db/migrations/questioner.py", line 114, in _choice_input
result = input()
KeyboardInterrupt
}}}
This isn’t very user-friendly: it seems like maybe you broke Django, and
it pushes the question up out of the terminal window.
Instead, we could quit with a nice message, perhaps something like:
{{{
Select an option: ^C
Cancelled, no migration file for app 'example' written.
}}}
The message needs to be clear in the case that `makemigrations` generates
some migration files but not others.
It should probably use [
https://docs.djangoproject.com/en/5.1/ref/django-
admin/#syntax-coloring the notice style].
--
Ticket URL: <
https://code.djangoproject.com/ticket/36016>
Django <
https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.