Refs #30664 -- Fixed migrations crash when altering AutoField/BigAutoField with quoted db_column on PostgreSQL.

This commit is contained in:
Mariusz Felisiak 2019-08-01 11:20:56 +02:00
parent e4684220af
commit ff111ea5e3
2 changed files with 21 additions and 1 deletions

View File

@ -70,7 +70,7 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
# Make ALTER TYPE with SERIAL make sense. # Make ALTER TYPE with SERIAL make sense.
table = strip_quotes(model._meta.db_table) table = strip_quotes(model._meta.db_table)
if new_type.lower() in ("serial", "bigserial"): if new_type.lower() in ("serial", "bigserial"):
column = new_field.column column = strip_quotes(new_field.column)
sequence_name = "%s_%s_seq" % (table, column) sequence_name = "%s_%s_seq" % (table, column)
col_type = "integer" if new_type.lower() == "serial" else "bigint" col_type = "integer" if new_type.lower() == "serial" else "bigint"
return ( return (

View File

@ -636,6 +636,26 @@ class SchemaTests(TransactionTestCase):
with connection.schema_editor() as editor: with connection.schema_editor() as editor:
editor.alter_field(Author, old_field, new_field, strict=True) editor.alter_field(Author, old_field, new_field, strict=True)
@isolate_apps('schema')
def test_alter_auto_field_quoted_db_column(self):
class Foo(Model):
id = AutoField(primary_key=True, db_column='"quoted_id"')
class Meta:
app_label = 'schema'
with connection.schema_editor() as editor:
editor.create_model(Foo)
self.isolated_local_models = [Foo]
old_field = Foo._meta.get_field('id')
new_field = BigAutoField(primary_key=True)
new_field.model = Foo
new_field.db_column = '"quoted_id"'
new_field.set_attributes_from_name('id')
with connection.schema_editor() as editor:
editor.alter_field(Foo, old_field, new_field, strict=True)
Foo.objects.create()
def test_alter_not_unique_field_to_primary_key(self): def test_alter_not_unique_field_to_primary_key(self):
# Create the table. # Create the table.
with connection.schema_editor() as editor: with connection.schema_editor() as editor: