1
0
mirror of https://github.com/django/django.git synced 2025-01-03 15:06:09 +00:00

Fixed #34366 -- Reduced AlterField operations when optimizing migrations.

This commit is contained in:
Laurent Tramoy 2023-02-24 13:48:46 +01:00 committed by Mariusz Felisiak
parent f9fe062de5
commit 2276ec8c21
2 changed files with 15 additions and 9 deletions

View File

@ -247,9 +247,9 @@ class AlterField(FieldOperation):
return "alter_%s_%s" % (self.model_name_lower, self.name_lower) return "alter_%s_%s" % (self.model_name_lower, self.name_lower)
def reduce(self, operation, app_label): def reduce(self, operation, app_label):
if isinstance(operation, RemoveField) and self.is_same_field_operation( if isinstance(
operation operation, (AlterField, RemoveField)
): ) and self.is_same_field_operation(operation):
return [operation] return [operation]
elif ( elif (
isinstance(operation, RenameField) isinstance(operation, RenameField)

View File

@ -221,10 +221,10 @@ class OptimizerTests(SimpleTestCase):
migrations.AlterOrderWithRespectTo("Foo", "a") 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 Two AlterUniqueTogether/AlterIndexTogether/AlterOrderWithRespectTo
should collapse into the second. /AlterField should collapse into the second.
""" """
self.assertOptimizesTo( self.assertOptimizesTo(
[ [
@ -237,29 +237,35 @@ class OptimizerTests(SimpleTestCase):
) )
def test_alter_alter_table_model(self): def test_alter_alter_table_model(self):
self._test_alter_alter_model( self._test_alter_alter(
migrations.AlterModelTable("Foo", "a"), migrations.AlterModelTable("Foo", "a"),
migrations.AlterModelTable("Foo", "b"), migrations.AlterModelTable("Foo", "b"),
) )
def test_alter_alter_unique_model(self): 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", "b"]]),
migrations.AlterUniqueTogether("Foo", [["a", "c"]]), migrations.AlterUniqueTogether("Foo", [["a", "c"]]),
) )
def test_alter_alter_index_model(self): 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", "b"]]),
migrations.AlterIndexTogether("Foo", [["a", "c"]]), migrations.AlterIndexTogether("Foo", [["a", "c"]]),
) )
def test_alter_alter_owrt_model(self): def test_alter_alter_owrt_model(self):
self._test_alter_alter_model( self._test_alter_alter(
migrations.AlterOrderWithRespectTo("Foo", "a"), migrations.AlterOrderWithRespectTo("Foo", "a"),
migrations.AlterOrderWithRespectTo("Foo", "b"), 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): def test_optimize_through_create(self):
""" """
We should be able to optimize away create/delete through a create or We should be able to optimize away create/delete through a create or