Opened 8 years ago
Last modified 4 years ago
#27339 new Cleanup/optimization
Adding an AutoField prompts for a default which creates a broken migration
Reported by: | Tim Graham | Owned by: | |
---|---|---|---|
Component: | Migrations | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Accepted | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Change:
class Foo(models.Model): id = models.CharField(max_length=20, primary_key=True)
to:
class Foo(models.Model): character_id = models.AutoField(primary_key=True)
The created migration has these operations:
migrations.RemoveField( model_name='foo', name='id', ), migrations.AddField( model_name='foo', name='character_id', field=models.AutoField(default=0, primary_key=True, serialize=False), preserve_default=False, ),
(entering 0 at the default prompt). Running the migration on PostgreSQL gives: ProgrammingError: multiple default values specified for column "character_id" of table "t27267_foo"
. I'm not sure if this can be made to work sensibly. Removing the default from the migration operation works, but if there's an existing data, the character_id
field must be populated somehow (perhaps a RunPython
could be done in the same migration?). #27338 is related. This was discovered while investigating #27267.
Change History (3)
comment:1 by , 7 years ago
comment:2 by , 5 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
I am facing the same issue, but on my case I don't have data on the existing table. I'll think how to solve this issue.
comment:3 by , 4 years ago
Owner: | removed |
---|---|
Status: | assigned → new |
In Django 2.0b1 when trying to migrate without the default value, the CLI asks to enter a default value.