summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Tramoy <laurent.tramoy@gitguardian.com>2023-02-24 13:48:46 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-02-24 13:59:42 +0100
commit2276ec8c21655b05bb44e14e236b499aa5d01f5b (patch)
tree3b3953785ad2d5fde1ef6792b7a962552f46f09b
parentf9fe062de5fc0896d6bbbf3f260b5c44473b3c77 (diff)
Fixed #34366 -- Reduced AlterField operations when optimizing migrations.
-rw-r--r--django/db/migrations/operations/fields.py6
-rw-r--r--tests/migrations/test_optimizer.py18
2 files changed, 15 insertions, 9 deletions
diff --git a/django/db/migrations/operations/fields.py b/django/db/migrations/operations/fields.py
index cd3aab43ad..fc5640bea9 100644
--- a/django/db/migrations/operations/fields.py
+++ b/django/db/migrations/operations/fields.py
@@ -247,9 +247,9 @@ class AlterField(FieldOperation):
return "alter_%s_%s" % (self.model_name_lower, self.name_lower)
def reduce(self, operation, app_label):
- if isinstance(operation, RemoveField) and self.is_same_field_operation(
- operation
- ):
+ if isinstance(
+ operation, (AlterField, RemoveField)
+ ) and self.is_same_field_operation(operation):
return [operation]
elif (
isinstance(operation, RenameField)
diff --git a/tests/migrations/test_optimizer.py b/tests/migrations/test_optimizer.py
index 6485009eb4..8cd4c67fbd 100644
--- a/tests/migrations/test_optimizer.py
+++ b/tests/migrations/test_optimizer.py
@@ -221,10 +221,10 @@ class OptimizerTests(SimpleTestCase):
migrations.AlterOrderWithRespectTo("Foo", "a")
)
- def _test_alter_alter_model(self, alter_foo, alter_bar):
+ def _test_alter_alter(self, alter_foo, alter_bar):
"""
Two AlterUniqueTogether/AlterIndexTogether/AlterOrderWithRespectTo
- should collapse into the second.
+ /AlterField should collapse into the second.
"""
self.assertOptimizesTo(
[
@@ -237,29 +237,35 @@ class OptimizerTests(SimpleTestCase):
)
def test_alter_alter_table_model(self):
- self._test_alter_alter_model(
+ self._test_alter_alter(
migrations.AlterModelTable("Foo", "a"),
migrations.AlterModelTable("Foo", "b"),
)
def test_alter_alter_unique_model(self):
- self._test_alter_alter_model(
+ self._test_alter_alter(
migrations.AlterUniqueTogether("Foo", [["a", "b"]]),
migrations.AlterUniqueTogether("Foo", [["a", "c"]]),
)
def test_alter_alter_index_model(self):
- self._test_alter_alter_model(
+ self._test_alter_alter(
migrations.AlterIndexTogether("Foo", [["a", "b"]]),
migrations.AlterIndexTogether("Foo", [["a", "c"]]),
)
def test_alter_alter_owrt_model(self):
- self._test_alter_alter_model(
+ self._test_alter_alter(
migrations.AlterOrderWithRespectTo("Foo", "a"),
migrations.AlterOrderWithRespectTo("Foo", "b"),
)
+ def test_alter_alter_field(self):
+ self._test_alter_alter(
+ migrations.AlterField("Foo", "name", models.IntegerField()),
+ migrations.AlterField("Foo", "name", models.IntegerField(help_text="help")),
+ )
+
def test_optimize_through_create(self):
"""
We should be able to optimize away create/delete through a create or