Opened 3 days ago

Last modified 2 days ago

#36016 assigned Cleanup/optimization

Avoid traceback when quitting makemigrations with Ctrl-C — at Version 3

Reported by: Adam Johnson Owned by:
Component: Migrations Version: dev
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: yes Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Adam Johnson)

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 minimal output, perhaps a simple message like:

Select an option:  ^C
Cancelled.

If there's a message, it should probably use the notice style.

Change History (3)

comment:1 by Adam Johnson, 3 days ago

Description: modified (diff)

comment:2 by Adam Johnson, 3 days ago

Description: modified (diff)

comment:3 by Adam Johnson, 3 days ago

Description: modified (diff)
Note: See TracTickets for help on using tickets.
Back to Top