Opened 9 years ago
Last modified 5 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 , 8 years ago
comment:2 by , 6 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 , 5 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.