#35416: Removing a primary_key field causes a migration crash
-----------------------------------------+------------------------
               Reporter:  Sarah Boyce    |          Owner:  nobody
                   Type:  Uncategorized  |         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              |
-----------------------------------------+------------------------
 [I am using SQLite]

 Create a model with a primary_key field and makemigrations and migrate
 {{{#!python
 from django.db import models


 class MySimpleModel(models.Model):
     some_pk = models.IntegerField(primary_key=True)
 }}}
 Then remove the field and makemigrations
 {{{#!python
 class MySimpleModel(models.Model):
     pass
 }}}
 This prompts you to supply a default because

 {{{
 It is impossible to add a non-nullable field 'id' to mysimplemodel without
 specifying a default.
 }}}
 If you supply a default, you get a migration like this:

 {{{#!python
 from django.db import migrations, models


 class Migration(migrations.Migration):

     dependencies = [
         ('app3', '0001_initial'),
     ]

     operations = [
         migrations.RemoveField(
             model_name='mysimplemodel',
             name='some_pk',
         ),
         migrations.AddField(
             model_name='mysimplemodel',
             name='id',
             field=models.BigAutoField(auto_created=True, default=1,
 primary_key=True, serialize=False, verbose_name='ID'),
             preserve_default=False,
         ),
     ]
 }}}
 This crashes when you migrate with:
 {{{
 django.db.utils.OperationalError: near ")": syntax error
 }}}

 But if you remove the provided default from the migration and switch the
 order so that the field is added before the previous primary_key field is
 removed, the migration can be applied.


 This is very similar to #22997 and certainly related (they didn't remove
 the field but instead altered the field to no longer be a primary_key in
 that ticket).
 I am not sure whether to class this as a duplicate and require a fix as
 part of #22997 - happy to hear opinions here.
-- 
Ticket URL: <https://code.djangoproject.com/ticket/35416>
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 on the web visit 
https://groups.google.com/d/msgid/django-updates/0107018f2ee72eba-ad63b6e2-a68d-4e45-a6b0-822d487acf71-000000%40eu-central-1.amazonses.com.

Reply via email to