#35589: AlterField should raise an error when changing primary key
----------------------------------+--------------------------------------
     Reporter:  Csirmaz Bendegúz  |                    Owner:  (none)
         Type:  New feature       |                   Status:  closed
    Component:  Migrations        |                  Version:  dev
     Severity:  Normal            |               Resolution:  wontfix
     Keywords:  primary key       |             Triage Stage:  Unreviewed
    Has patch:  0                 |      Needs documentation:  0
  Needs tests:  0                 |  Patch needs improvement:  0
Easy pickings:  0                 |                    UI/UX:  0
----------------------------------+--------------------------------------
Changes (by Sarah Boyce):

 * resolution:   => wontfix
 * status:  new => closed

Comment:

 On SQLite, with a model:
 {{{#!python
 class PkModel(models.Model):
     field_1 = models.CharField(max_length=255, primary_key=True)
     field_2 = models.CharField(max_length=255)
 }}}
 The schema is: `CREATE TABLE "app1_pkmodel" ("field_2" varchar(255) NOT
 NULL, "field_1" varchar(255) NOT NULL PRIMARY KEY)`
 I remove `primary_key=True` from `field_1` and add it to `field_2` and
 `makemigrations`, the operations generated are:

 {{{#!python
 operations = [
     migrations.AlterField(
         model_name='pkmodel',
         name='field_1',
         field=models.CharField(max_length=255),
     ),
     migrations.AlterField(
         model_name='pkmodel',
         name='field_2',
         field=models.CharField(max_length=255, primary_key=True,
 serialize=False),
    ),
 ]
 }}}

 This migrates successfully and the schema then becomes: `CREATE TABLE
 "app1_pkmodel" ("field_1" varchar(255) NOT NULL, "field_2" varchar(255)
 NOT NULL PRIMARY KEY)`
 I can also migrate backwards successfully and the schema changes back. In
 the shell, I can create (or not create) data as expected.

 Given this, altering a primary key is at the very least supported on
 SQLite.
 Csirmaz, you might have found a specific bug or a backend where this is
 not supported. We would need more details to replicate this

 Given that we support it in some cases, and are actively working on trying
 to resolve bugs in specific cases (#22997), I think the path forward would
 be sharing the case you found where it doesn't work and that would be
 treated as a bug
-- 
Ticket URL: <https://code.djangoproject.com/ticket/35589#comment:4>
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 django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/01070190c9e5bf57-6b514867-b06f-439f-9feb-3799f8018a00-000000%40eu-central-1.amazonses.com.

Reply via email to