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
Pull Requests:How to create a pull request

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.

According to the ticket's flags, the next step(s) to move this issue forward are:

  • To provide a patch by sending a pull request. Claim the ticket when you start working so that someone else doesn't duplicate effort. Before sending a pull request, review your work against the patch review checklist. Check the "Has patch" flag on the ticket after sending a pull request and include a link to the pull request in the ticket comment when making that update. The usual format is: [https://github.com/django/django/pull/#### PR].

Change History (3)

comment:1 by Akshay Raj Gollahalli, 7 years ago

In Django 2.0b1 when trying to migrate without the default value, the CLI asks to enter a default value.

comment:2 by za, 5 years ago

Owner: changed from nobody to za
Status: newassigned

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 Mariusz Felisiak, 4 years ago

Owner: za removed
Status: assignednew
Note: See TracTickets for help on using tickets.
Back to Top