1
0
mirror of https://github.com/django/django.git synced 2025-10-31 09:41:08 +00:00

Fixed #31825 -- Made RenameField operation a noop for fields with db_column.

This commit is contained in:
Iuri de Silvio
2020-07-24 18:08:40 -03:00
committed by Mariusz Felisiak
parent 20799cc0a6
commit 7f4c9222df
4 changed files with 54 additions and 0 deletions

View File

@@ -538,6 +538,8 @@ class BaseDatabaseSchemaEditor:
If `strict` is True, raise errors if the old column does not match
`old_field` precisely.
"""
if not self._field_should_be_altered(old_field, new_field):
return
# Ensure this field is even column-based
old_db_params = old_field.db_parameters(connection=self.connection)
old_type = old_db_params['type']
@@ -1034,6 +1036,13 @@ class BaseDatabaseSchemaEditor:
output.append(self._create_index_sql(model, [field]))
return output
def _field_should_be_altered(self, old_field, new_field):
# Don't alter when changing only a field name.
return (
old_field.column != new_field.column or
old_field.deconstruct()[1:] != new_field.deconstruct()[1:]
)
def _field_should_be_indexed(self, model, field):
return field.db_index and not field.unique

View File

@@ -99,6 +99,8 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
super().alter_db_table(model, old_db_table, new_db_table)
def alter_field(self, model, old_field, new_field, strict=False):
if not self._field_should_be_altered(old_field, new_field):
return
old_field_name = old_field.name
table_name = model._meta.db_table
_, old_column_name = old_field.get_attname_column()