mirror of https://github.com/django/django.git
Fixed #22460 -- Explicity remove constraints when dropping a related field.
This commit is contained in:
parent
b5ce21accb
commit
0e45669fa9
|
@ -442,8 +442,16 @@ class BaseDatabaseSchemaEditor(object):
|
||||||
# It might not actually have a column behind it
|
# It might not actually have a column behind it
|
||||||
if field.db_parameters(connection=self.connection)['type'] is None:
|
if field.db_parameters(connection=self.connection)['type'] is None:
|
||||||
return
|
return
|
||||||
# Get the column's definition
|
# Drop any FK constraints, MySQL requires explicit deletion
|
||||||
definition, params = self.column_sql(model, field)
|
if field.rel:
|
||||||
|
fk_names = self._constraint_names(model, [field.column], foreign_key=True)
|
||||||
|
for fk_name in fk_names:
|
||||||
|
self.execute(
|
||||||
|
self.sql_delete_fk % {
|
||||||
|
"table": self.quote_name(model._meta.db_table),
|
||||||
|
"name": fk_name,
|
||||||
|
}
|
||||||
|
)
|
||||||
# Delete the column
|
# Delete the column
|
||||||
sql = self.sql_delete_column % {
|
sql = self.sql_delete_column % {
|
||||||
"table": self.quote_name(model._meta.db_table),
|
"table": self.quote_name(model._meta.db_table),
|
||||||
|
|
|
@ -416,6 +416,22 @@ class OperationTests(MigrationTestBase):
|
||||||
operation.database_backwards("test_rmfl", editor, new_state, project_state)
|
operation.database_backwards("test_rmfl", editor, new_state, project_state)
|
||||||
self.assertColumnExists("test_rmfl_pony", "pink")
|
self.assertColumnExists("test_rmfl_pony", "pink")
|
||||||
|
|
||||||
|
def test_remove_fk(self):
|
||||||
|
"""
|
||||||
|
Tests the RemoveField operation on a foreign key.
|
||||||
|
"""
|
||||||
|
project_state = self.set_up_test_model("test_rfk", related_model=True)
|
||||||
|
self.assertColumnExists("test_rfk_rider", "pony_id")
|
||||||
|
operation = migrations.RemoveField("Rider", "pony")
|
||||||
|
new_state = project_state.clone()
|
||||||
|
operation.state_forwards("test_rfk", new_state)
|
||||||
|
with connection.schema_editor() as editor:
|
||||||
|
operation.database_forwards("test_rfk", editor, project_state, new_state)
|
||||||
|
self.assertColumnNotExists("test_rfk_rider", "pony_id")
|
||||||
|
with connection.schema_editor() as editor:
|
||||||
|
operation.database_backwards("test_rfk", editor, new_state, project_state)
|
||||||
|
self.assertColumnExists("test_rfk_rider", "pony_id")
|
||||||
|
|
||||||
def test_alter_model_table(self):
|
def test_alter_model_table(self):
|
||||||
"""
|
"""
|
||||||
Tests the AlterModelTable operation.
|
Tests the AlterModelTable operation.
|
||||||
|
|
Loading…
Reference in New Issue