#36016: Avoid traceback when quitting makemigrations with Ctrl-C
------------------------------+--------------------------------------
Reporter: Adam Johnson | Owner: (none)
Type: New feature | Status: new
Component: Migrations | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
------------------------------+--------------------------------------
Description changed by Adam Johnson:
Old description:
> 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].
New description:
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
migration files for some apps but is then quit.
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#comment:1>
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/01070193d01c9074-80238b5f-7a7e-4dd8-97b6-39fd5b9f93d8-000000%40eu-central-1.amazonses.com.