#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.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/django-updates/01070193d01bf19c-0dfb0aeb-ad6d-40a3-8012-723ac1455f60-000000%40eu-central-1.amazonses.com.