#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.

Reply via email to